边看视频边练习 写了个程序 可是有点小问题
- import java.io.BufferedReader;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.util.Scanner;
- import java.util.concurrent.Executors;
- import javax.sound.midi.Receiver;
- public class Send {
- /*
- 通过udp通信 将一段数据发送出去
- 1.建立 udp socket 服务
- 2.提供数据 数据封装到 包
- 3.发送
- 4.关闭
- */
- public static void main(String[] args)throws Exception {
- Executors.newSingleThreadExecutor().execute(new Runnable() {
- public void run() {
- try {
- receice();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- };
- });
- Thread.sleep(1000);
- Executors.newSingleThreadExecutor().execute(new Runnable() {
- public void run() {
- try {
- send();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- };
- });
- }
- static void send() throws Exception{
- //建立 udp 服务 可以指定端口 送 不指定 则随机使用端口 发送数据
- DatagramSocket ds =new DatagramSocket();
- //确定数据 封装成包 DatagramPacket(字节数组, 要发送的长度,发送的ip,目标端口)
- Scanner sc = new Scanner(System.in);
- String str="";
- for(;;){
- System.out.print("请输入:");
- str = sc.nextLine();
- byte[] buf =str.getBytes();
- DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getLocalHost(),2255);
- //发送数据
- ds.send(dp);
- }
- }
- static void receice() throws Exception{
- //创建upd socket 服务 应该指定端口 则 该socket 将在此端口接受数据
- DatagramSocket ds = new DatagramSocket(2255);
- for(;;){
- byte[] buf = new byte[1024];
- DatagramPacket dp =new DatagramPacket(buf, buf.length);
- ds.receive(dp);//接受数据包
- String ip = dp.getAddress().getHostAddress();
- String msg = new String(dp.getData(),0,dp.getLength());// 获取接受的信息
- int port = dp.getPort();
- System.out.println(ip+":"+port+"---->"+msg);
- }
- }
- }
复制代码
程序有一个发送 方法 一个接受方法, 在main方法先用一个线程开启接受 ,间隔1s 后用另一个线程开启发送。
但是为什么第一次发送的数据总是接受不到呢?
|
|