关于java:UDP通信程序

UDP通信原理

是一种不牢靠的网络协议,只管发送,不论对方是否接管到

UDP发送数据

发送数据步骤

UDP协定是用户数据报协定

  • 创立发送端的Socket对象(DatagramSocket) DatagramSocket()
  • 创立数据,并把数据打包 DatagramPacket(byte[] buf,int length,InetAddress address,int port)
  • 调用DatagramSocket对象的办法发送数据 void send(DatagramPacket p)
  • 敞开发送端 void close()
    发送数据程序

    //创立发送端的Socket对象
    //DatagramSocket()结构数据报套接字并将其绑定到本地主机上的任何可用端口
    DatagramSocket ds = new DatagramSocket();//alt enter 抛出异样
    
    //创立数据,并把数据打包
    //DatagramPacket(byte[] buf,int length,InetAddress address,int port) 
    //结构一个数据包,发送长度为length的数据包到指定主机上的指定端口号
    byte[] bys = "hello,udp,我来了".getBytes();
    int length = bys.length;
    InetAddress address = InetAddress.getByName("192.168.1.66"); //alt enter 抛出异样
    int port = 10086;
    //创立数据包
    DatagramPacket dp = new DatagramPacket(bys,length,address ,port);
    
    //下面的几行代码能够优化为
    DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.1.66"),port:10086);
    
    //调用DatagramSocket对象的办法发送数据
    //send(DatagramPacket p) 从此套接字发送数据报包
    ds.send(dp);
    //敞开发送端
    //void close() 敞开数据报套接字
    ds.close();

UDP接收数据

接收数据步骤

  • 创立接收端的Socket对象(DatagramSocket) DatagramSocket(int port)
  • 创立一个数据包,用于接收数据 DatagramPacket(byte[] buf,int length)
  • 调用DatagramSocket对象的办法接收数据,把数据接管到数据包中 void receive(DatagramPacket p)
  • 解析数据包,并把数据在控制台显示 byte[] getData() int getLength()
  • 敞开接收端 void close()
    接收数据程序

    //创立接收端的Socket对象用带参构造方法,指定一个端口
    //DatagramSocket(int port)结构数据报套接字并将其绑定到本地主机上的指定端口
    DatagramSocket ds = new DatagramSocket(port:10086);//alt enter 抛出异样
    
    //创立一个数据包,用于接收数据 
    //DatagramPacket(byte[] buf,int length) 
    //结构一个DatagramPacket,用于接管长度为length的数据包
    byte[] bys = new byte[1024];
    //创立数据包
    DatagramPacket dp = new DatagramPacket(bys,bys.length);
    
    //调用DatagramSocket对象的办法接收数据,把数据接管到数据包中
    ds.receive(dp);
    
    //解析数据包,并把数据在控制台显示
    //byte[] getData() 返回数据缓冲区
    byte[] datas = dp.getData();//这个是数据缓冲区
    //int getLength() 返回要发送的数据的长度或者接管到的数据的长度
    int len = dp.getLength();//拿到的是理论发送了多少数据
    String dataString = new String(datas,offset:0,len);
    sout("数据是:"+dataString);
    //下面两行优化
    sout("数据是:"+new String(dp.getData(),offset:0,dp.getLength()));
    //敞开发送端
    //void close() 敞开数据报套接字
    ds.close();

UDP通信程序练习


发送数据程序

//创立发送端的Socket对象
DatagramSocket ds = new DatagramSocket();//alt enter 抛出异样

//本人封装键盘录入数据
BufferedReader br = BufferedReader(new InputStreamReader(System.in));
String line;
while((line=br.readLine())!=null){//alt enter 抛出异样
    //所输出的数据是886,发送数据完结
    if("886".equals(line)){
        break;
    }
    //如果不是,就创立数据,并把数据打包
    byte[] bys = line.getBytes();
    //创立数据包
    DatagramPacket dp = new DatagramPacket(bys,length,InetAddress.getByName("192.168.1.66"),port:12345);
    
    //调用DatagramSocket对象的办法发送数据
    ds.send(dp);
}
//敞开发送端
ds.close();

接收数据程序

//创立接收端的Socket对象用带参构造方法,指定一个端口
DatagramSocket ds = new DatagramSocket(port:12345);//alt enter 抛出异样
while(true){//死循环接管
    //创立一个数据包,用于接收数据 
    //DatagramPacket(byte[] buf,int length) 
    //结构一个DatagramPacket,用于接管长度为length的数据包
    byte[] bys = new byte[1024];
    //创立数据包
    DatagramPacket dp = new DatagramPacket(bys,bys.length);

    //调用DatagramSocket对象的办法接收数据,把数据接管到数据包中
    ds.receive(dp);//alt enter 抛出异样

    //解析数据包,并把数据在控制台显示
    sout("数据是:"+new String(dp.getData(),offset:0,dp.getLength()));
}
//敞开发送端
ds.close();
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理