Java网络编程之UDP
UDP协议为无连接的通信协议,在传数据前发送端与接收端不会先建立连接,也就是你发我就收但不一定会收到哦,以我们自身为发送端,我们不会事先让接收方知道我要给接收方发数据啦。就像异地的小情侣一样,小哥哥选好时间去看小姐姐而不事先告诉她。因为是无连接的,这期中就会出现丢失数据包的现象,就好像虽然要去看小姐姐,但因为各种原因没能到达小姐姐那边,比如说大灰机延误啦。。。小哥哥也就不能在自己预定的时间到达。(PS希望我的灰机不会延误)我们以此为例来看下Java中简单的UDP要怎么实现吧。对了在看代码前我们要先知道Java中的两个类DatagramSocket“发送码头”,DatagramPacket“集装箱”。可以参照API文档来看一下,我们要把数据放入箱子后才能送到码头发出,同样的接收的地方同样需要码头。
接收端代码
import java.net.*;
public class Girl {
//接收端,这边是小姐姐那边哦
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//先来定义一个用来接收数据的字节数组
byte[] buf = new byte[1024];
//定义接收的监听端口,我们这边随便写一个8954,等下发送端那边也要给这个端口发哦
DatagramSocket ds = new DatagramSocket(8954);
//定义接收对象
DatagramPacket dp = new DatagramPacket(buf,1024);
//监听端口等待接收数据
ds.receive(dp);
//将数据打印到屏幕
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str);
ds.close();//注意资源大释放
}
}
发送端代码
import java.net.*;
public class Boy {
//发送端,这边是小哥哥那边哦
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//两边代码类似只是这边用send方法来发送
DatagramSocket ds = new DatagramSocket(3000);
String str = "I am coming";
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),8954);
System.out.println("send the message");
ds.send(dp);
ds.close();
}
}
欢迎大佬赐教