<强> java中模拟UDP传输的发送端和接收端实例详解强>
<强>一、创建UDP传输的发送端强>
1,建立UDP套接字的服务,
2,将要发送的数据封装到数据包中,
3,通过UDP套接字的服务将数据包发送出去。
4,关闭插座服务。
进口java.io.IOException; 进口java.net.DatagramPacket; 进口java.net.DatagramSocket; 进口java.net.InetAddress; 公开课UDPSend { 公共静态void main (String [] args)抛出IOException { System.out.println(“发送端启动……”);//1,创建UDP的套接字,使用DatagramSocket对象 DatagramSocket ds=new DatagramSocket ();//2,将要发送的数据封装到数据包中 字符串str=" UDP传输演示:我来了!”; byte [] buf=str.getBytes ();//使用DatagramPacket将数据封装到该对象的包中 DatagramPacket dp=new DatagramPacket (buf缓冲区。长度,InetAddress.getByName (“192.168.191.1”), 10000);//3,通过UDP套接字的服务将数据包发送出去,使用发送方法 ds.send (dp);//4、关闭插座服务 ds.close (); } } >之前<强>二,创建UDP传输的接收端强>
1,建立UDP套接字的服务,因为要接收数据,所以必须明确一个端口号;
2,创建数据包,用于存储接收到的数据,方便用数据包对象的方法解析这些数据;
3,使用UDP套接字的服务的接收方法接收数据并存储到数据包中,
4,通过数据包的方法解析这些数据;
5,关闭插座服务。
进口java.io.IOException; 进口java.net.DatagramPacket; 进口java.net.DatagramSocket; 公开课UDPReceive { 公共静态void main (String [] args)抛出IOException { System.out.println(“接收端启动……”);//1,建立UDP套接字的服务 DatagramSocket ds=new DatagramSocket (10000);//2、创建数据包 byte [] buf=新字节[1024]; buf.length DatagramPacket dp=new DatagramPacket (buf);//3、使用接收方法将数据存储到数据包中 ds.receive (dp);//该方法为阻塞式的方法//4,通过数据包对象的方法解析这些数据,例如:地址,端口,数据内容等 .getHostAddress字符串ip=dp.getAddress () (); int port=dp.getPort (); 字符串文字=新的字符串(dp.getData (), 0, dp.getLength ()); 系统。println (ip +”:“+ +港”:“+文本);//5、关闭插座服务 ds.close (); } } >之前<强>三、优化UDP传输的发送端和接收端强>
由于在前两部分中,我们一次只能发送(或接收)一条消息,然后就关闭服务啦!因此如果我们想要发送多条消息,则需要不断的在发送端修改发送的内容,并且还需要重新启动服务器,比较麻烦。为了克服以上的缺点,我们可以对其进行优化,即:
1,在发送端,创建BufferedReader,从键盘录入内容,
2,在接收端,添加而(真正的)循环,不断的循环接收内容。
/* * *优化UDP传输的发送端 */进口java.io.BufferedReader; 进口java.io.IOException; 进口java.io.InputStreamReader; 进口java.net.DatagramPacket; 进口java.net.DatagramSocket; 进口java.net.InetAddress; 公开课UDPSend { 公共静态void main (String [] args)抛出IOException { System.out.println(“发送端启动……”);//创建UDP的套接字,使用DatagramSocket对象 DatagramSocket ds=new DatagramSocket (); BufferedReader bufr=new BufferedReader(新InputStreamReader(系统)); 字符串行=零; 在((=bufr.readLine行())!=null) {//使用DatagramPacket将数据封装到该对象的包中 byte [] buf=line.getBytes (); DatagramPacket dp=new DatagramPacket (buf缓冲区。长度,InetAddress.getByName (“192.168.191.1”), 10000);//通过UDP套接字的服务将数据包发送出去,使用发送方法 ds.send (dp);//如果输入信息为结束,则结束循环 如果(“/?equals(线)) 打破; }//关闭插座服务 ds.close (); } } >之前/* * *优化UDP传输的接收端 */进口java.io.IOException; 进口java.net.DatagramPacket; 进口java.net.DatagramSocket; 公开课UDPReceive { 公共静态void main (String [] args)抛出IOException { System.out.println(“接收端启动……”);//建立UDP套接字的服务 DatagramSocket ds=new DatagramSocket (10000); 而(真){//创建数据包 byte [] buf=新字节[1024]; buf.length DatagramPacket dp=new DatagramPacket (buf);//使用接收方法将数据存储到数据包中 ds.receive (dp);//该方法为阻塞式的方法//通过数据包对象的方法解析这些数据,例如:地址,端口,数据内容等 .getHostAddress字符串ip=dp.getAddress () (); int port=dp.getPort (); 字符串文字=新的字符串(dp.getData (), 0, dp.getLength ()); 系统。println (ip +”:“+ +港”:“+文本); } } }java中模拟UDP传输的发送端和接收端实例详解