1.UDP简介
使用UDP发送消息,对方不一定收到,因为所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待接收服务器发送过来的信息,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发。
2.程序实现
使用DatagramPacket类包装一条要发送的信息,之后使用DatagramSocket类用于完成信息的发送操作。DatagramPacket类的常用方法:
|
类型 |
方法 |
|
| 构造 |
|
构造 DatagramPacket,用来接收长度为 length 的数据包。 |
| 构造 | DatagramPacket(byte[] buf, int length, InetAddress address, int port) |
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 |
| byte[] | getData() |
返回数据缓冲区。 |
int |
|
返回将要发送或接收到的数据的长度。 |
DatagramSocket类常用方法:
|
类型 |
方法 |
描述 |
| 构造 | DatagramSocket(int port) |
创建数据报套接字并将其绑定到本地主机上的指定端口。 |
void |
|
从此套接字发送数据报包。 |
void |
|
从此套接字接收数据报包。 |
服务器端:
package org.demo.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServer {
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
DatagramPacket dp = null;
ds = new DatagramSocket(3000);
String str = "hello";
dp = new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("localhost"),9000);
System.out.println("发送信息。");
ds.send(dp);
ds.close();
}
}
运行结果:
客户端:package org.demo.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPClient {
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
byte[] buf = new byte[1024];//定义接收数据的字节数组
DatagramPacket dp = null;
ds = new DatagramSocket(9000);
dp = new DatagramPacket(buf,1024);
System.out.println("等待数据接收。");
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength())+"from"
+dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(str);
ds.close();
}
}
运行结果:
来源:https://www.cnblogs.com/yzl-i/p/4463387.html