UDP客户端无法在Java中访问

时间:2009-05-14 07:33:18

标签: java udp network-protocols

我正在运行一个简单的UDP Java服务器,它在连接时收集IP和客户端端口,将信息存储在数据库中。

客户端仍在侦听服务器。服务器停止。

以后,服务器要重用数据库信息,才能到达客户端;并且由于客户端仍然在监听相同的服务器端口,我猜客户端应该接收通信。

我是UDP新手,请让我知道实现上述目标的方法。谢谢。

让我重新解释这个问题,因为我尝试了Stackoverflow成员提出的方法。

服务器可以在短时间内联系客户端,但是说10分钟后客户端无法访问;虽然看起来客户端已经准备好一直听服务器但服务器即使多次尝试也无法访问客户端。这可能是什么原因?请让我知道处理这个问题的方法

2 个答案:

答案 0 :(得分:0)

我认为你对UDP协议(RFC 768)有点困惑。我认为查看UDP协议以了解UDP和TCP之间的差异会很有帮助。

关于您的具体问题,如果没有任何类型的代码,很难知道您的确切问题是什么。太阳教程中有一个Client-Server in UDP example

答案 1 :(得分:0)

UDP是无会话的,所以我猜它应该确实有效。

它会是这样的:

// Client:

socket = new DatagramSocket();
DatagramPacket req = new DatagramPacket(data, data.length, serverAddress, serverPort);
socket.send(req);
DatagramPacket resp = new DatagramPacket(new byte[MAX_RESP_SIZE], MAX_RESP_SIZE);
socket.receive(resp);

// Server:

DatagramSocket socket = new DatagramSocket(port);
while (!stopped) {
    DatagramPacket req = new DatagramPacket(new byte[MAX_REQ_SIZE], MAX_REQ_SIZE);
    socket.receive(req);
    saveToDatabase(req.getAddress(), req.getPort());
}
socket.close();

// Then later:

DatagramSocket socket = new DatagramSocket(port);

// retrieve clientAddr and clientPort from database
DatagramPacket resp = new DatagramPacket(data, data.length, clientAddress, clientPort);
socket.send(resp);
socket.close();