UDP通讯协议练习
UDP是属于一种不可靠的协议 ,在通信的两端 需要建一个Socket(网络套接字)对象。但是这两个Socket只是发送和接收数据的对象,因此对于基于UDP协议的通信而言,没有所谓的客户端和服务器的概念。
DataGramSocket 基于UDP协议的Socket
- 此类表示用于发送和接收数据报数据包的套接字。
- 数据报套接字是分组传送服务的发送或接收点。
构造方法:
-
| DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口。 |
---|
protected | DatagramSocket(DatagramSocketImpl impl) 使用指定的DatagramSocketImpl创建一个未绑定的数据报套接字。 |
| DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口。 |
| DatagramSocket(int port, InetAddress laddr) 创建一个数据报套接字,绑定到指定的本地地址。 |
| DatagramSocket(SocketAddress bindaddr) 创建一个数据报套接字,绑定到指定的本地套接字地址。 |
-
void | receive(DatagramPacket p) 从此套接字接收数据报包。 |
---|
void | send(DatagramPacket p) 从此套接字发送数据报包。 |
DatagramPacket:
发送数据
package cn.lanqiao.thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
public class Send {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while (true){
line = reader.readLine();
byte[] bytes = line.getBytes(StandardCharsets.UTF_8);
DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("127.0.0.1"),3201);
ds.send(dp);
if("bye".equals(line))
break;
}
ds.close();
}
}
接收数据
package cn.lanqiao.thread;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Recive {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(3201);
while(true){
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
ds.receive(dp);
System.out.println("收到的数据为:" + new String(dp.getData(),0, dp.getLength()));
}
}
}
运行结果
|