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();}
}
● 显示效果


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