一个简单的Java UDP协议通信的例子Serverimport java.net.*;public class UDPServer {
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
private String receiveStr; public UDPServer() {
Init();
} public void Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0)// 无数据,则循环 {
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据 if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收 }
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String args[]) {
new UDPServer();
}
}Clientimport java.io.*;
import java.net.*;public class UDPClient
{
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte sendDataByte[];
private String sendStr; public UDPClient() {
Init();
} public void Init() {
try {
// 指定端口号,避免与其他应用程序发生冲突 dataSocket = new DatagramSocket(PORT+1);
sendDataByte = new byte[1024];
sendStr = "UDP方式发送数据";
sendDataByte = sendStr.getBytes();
dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,
InetAddress.getByName("localhost"), PORT);
dataSocket.send(dataPacket);
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
} public static void main(String args[]) {
new UDPClient();
}
}
客户端发送字符串 sendStr = "UDP方式发送数据";,服务器端是可以收到的,问题是如何通知客户端数据已经收到了呢?????
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
private String receiveStr; public UDPServer() {
Init();
} public void Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0)// 无数据,则循环 {
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据 if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收 }
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String args[]) {
new UDPServer();
}
}Clientimport java.io.*;
import java.net.*;public class UDPClient
{
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte sendDataByte[];
private String sendStr; public UDPClient() {
Init();
} public void Init() {
try {
// 指定端口号,避免与其他应用程序发生冲突 dataSocket = new DatagramSocket(PORT+1);
sendDataByte = new byte[1024];
sendStr = "UDP方式发送数据";
sendDataByte = sendStr.getBytes();
dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,
InetAddress.getByName("localhost"), PORT);
dataSocket.send(dataPacket);
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
} public static void main(String args[]) {
new UDPClient();
}
}
客户端发送字符串 sendStr = "UDP方式发送数据";,服务器端是可以收到的,问题是如何通知客户端数据已经收到了呢?????
dataSocket = new DatagramSocket(PORT+1);
服务器端如果通过这个端口把数据回传过来,客户端又如何接收呢????
在UDP里面,面向无连接,不可靠的传输,发送方发完数据就完事了,至于对方是否接受到,是否进行重发根本不管,这个是针对传输层来说的。
在应用层要校验数据正确性,这里的正确性是指内容正确,不是指丢包少包。你可以在内容上加入信息摘要,例如MD5等,确保内容没有被改过。