一个简单的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方式发送数据";,服务器端是可以收到的,问题是如何通知客户端数据已经收到了呢?????

解决方案 »

  1.   

    客户端在发送数据的时候同时指定了一个回传数据的端口
     dataSocket = new DatagramSocket(PORT+1);
    服务器端如果通过这个端口把数据回传过来,客户端又如何接收呢????
      

  2.   

    如果你说的问题是指网络双方的确认问题:这就是网络中著名的蓝军和红军问题。在TCP里面客户端接受到数据后如果正确完事了,如果不正确,就给发送方说:重新发送。而这个过程是在传输层完成的,应用层如果能接受到数据,说明都是正确的。通常采用三次握手来进行确认是否重发。
    在UDP里面,面向无连接,不可靠的传输,发送方发完数据就完事了,至于对方是否接受到,是否进行重发根本不管,这个是针对传输层来说的。
    在应用层要校验数据正确性,这里的正确性是指内容正确,不是指丢包少包。你可以在内容上加入信息摘要,例如MD5等,确保内容没有被改过。