Java——网络编程(UDP通信程序)

 1.1 UDP发送数据

 ● Java中的UDP通信

             ● UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念

             ● Java提供了DatagramSocket类作为基于UDP协议的Socket

 ● 构造方法

方法名说明
DatagramSocket()创建数据报套接字并将其绑定到本机地址上的任何可用端口
DatagramPacket(byte[] buf,int len,InetAddressadd,int port)创建数据包,发送长度为len的数据包到指定主机的指定端口

 ● 相关方法

方法名说明
void send(DatagramPacket p)发送数据报包
void close()关闭数据报套接字
void receive(DatagramPacket p)从此套接字接受数据报包

 ● 发送数据的步骤

             ● 创建发送端的Socket对象(DatagramSocket)
             ● 创建数据,并把数据打包
             ● 调用DatagramSocket对象的方法发送数据
             ● 关闭发送端

 ● 代码演示

package demo01;import java.io.IOException;
import java.net.*;/*UDP发送数据的步骤1:创建发送端的Socket对象(DatagramSocket)2:创建数据,并把数据打包3:调用DatagramSocket对象的方法发送数据4:关闭发送端
*/public class SendDemo {public static void main(String[] args) throws IOException {//创建发送端的Socket对象(DatagramSocket)// DatagramSocket () 构造数据报套接字并将其绑定到本地主机上的任何可用端口DatagramSocket ds = new DatagramSocket() ;//创建数据,并把数据打包//DatagramPacket (byte[] buf, int length, InetAddress address, int port)//构造一个数据包,发送长度为length的数据包到指定 主机上的指定端口号。byte[] bys = "hello,udp,我来了".getBytes();DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.96.88"),10086);//调用DatagramSocket对象的方法发送数据//void send (DatagramPacket p)从此套接字发送数据报包ds.send(dp);//关闭发送端//void close() 关闭此数据报套接字ds.close();}
}

1.2UDP接收数据

 ● 接收数据的步骤

             ● 创建接收端的Socket对象(DatagramSocket)
             ● 创建一个数据包,用于接收数据
             ● 调用DatagramSocket对象的方法接收数据
             ● 解析数据包,并把数据在控制台显示
             ● 关闭接收端

 ● 构造方法

方法名说明
DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包

 ● 相关方法

方法名说明
byte[] getData()返回数据缓冲区
int getLength()返回要发送的数据的长度或接收的数据的长度

 ● 示例代码

package demo01;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;/*UDP接收数据的步骤1:创建接收端的Socket对象(DatagramSocket)2:创建-一个数据包,用于接收数据3:调用DatagramSocket对象的方法接收数据4:解析数据包,并把数据在控制台显示5:关闭接收端*/public class ReceiveDemo{public static void main(String[]args)throws IOException {//创建接收端的Socket对象(DatagramSocket)DatagramSocket ds=new DatagramSocket(10086);while(true){//创建一个数据包,用于接收数据byte[]bys=new byte[1024];DatagramPacket dp = new DatagramPacket(bys,bys.length);// 调用DatagramSocket对象的方法接收数据ds.receive(dp);// 解析数据包,并把数据在控制台显示System.out.println("数据是:"+ new String(dp.getData(),0,dp.getLength()));//关闭接收端ds.close();}}
}

 ● 显示效果

1.3 UDP通信程序练习

 ● 案例需求

UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束

UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

 ● 代码实现

package demo02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
UDP发送数据:
数据来自于键盘录入,直到输入的数据是886,发送数据结束
*/public class SendDemo {public static void main(String[] args) throws IOException {//创建发送端的Socket对象(DatagramSocket)DatagramSocket ds = new DatagramSocket();//自己封装键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line;while ((line = br.readLine()) != null) {//输入的数据是886,发送数据结束if ("886".equals(line)) {break;}//创建数据,并把数据打包byte[] bys = line.getBytes();DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.96.88"),12345);//调用DatagramSocket对象的方法发送数据ds.send(dp);}//关闭发送端ds.close();}
}
package demo02;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
*/public class ReceiveDemo {public static void main(String[] args) throws IOException {//创建接收端的Socket对象(DatagramSocket)DatagramSocket ds = new DatagramSocket(12345);while(true){//创建一个数据包,用于接收数据byte[]bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys,bys.length);//调用DatagramSocket对象的方法接收数据ds.receive(dp);//解析数据包,并把数据在控制台显示System.out.println("数据是:"+ new String(dp.getData(),0,dp.getLength()));}//关闭发送端
//        ds.close();}
}

 ● 显示效果


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部