【问题标题】:UDP client not reachable in JavaJava 中无法访问 UDP 客户端
【发布时间】:2010-10-26 02:38:30
【问题描述】:

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

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

后来,服务器想重用数据库信息,到达客户端;并且由于客户端仍在侦听服务器的同一端口,我猜客户端应该接收通信。

我是 UDP 新手,请告诉我实现上述目标的方法。谢谢。

让我重新表述这个问题,因为我确实尝试了 Stackoverflow 成员建议的方法。

服务器可以在很短的时间内联系到客户端,但在 10 分钟后客户端无法访问;虽然看起来客户端一直准备好监听服务器,但是即使尝试了几次,服务器也无法到达客户端。这可能是什么原因?请告诉我如何处理这个问题

【问题讨论】:

  • 客户端和服务器之间有防火墙吗?

标签: java udp network-protocols


【解决方案1】:

我认为您对 UDP 协议 (RFC 768) 有点困惑。我认为查看 UDP 协议以了解 UDP 和 TCP 之间的区别会有所帮助。

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

【讨论】:

  • 服务器可以在很短的时间内联系到客户端,但是10分钟后客户端无法访问;虽然看起来客户端一直准备好监听服务器,但是即使尝试了几次,服务器也无法到达客户端。这可能是什么原因?请告诉我如何处理这个问题
  • 如果没有具体的代码,很难指出哪个可能是问题所在。我建议您检查客户端使用的套接字是否与您用于发送第一个数据报的套接字相同。您可能正在创建两个套接字,而服务器正在将数据报发送到客户端不再监听的端口。
【解决方案2】:

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();

【讨论】:

  • 唯一的区别是我创建数据报包如下,以便以后从服务器到客户端进行通信: DatagramPacket resp = new DatagramPacket(data, data.length); resp.setSocketAddress(new InetSocketAddress(clientIp, clientPort));这有关系吗?
  • 服务器可以在很短的时间内联系到客户端,但是10分钟后客户端无法访问;虽然看起来客户端一直准备好监听服务器,但是即使尝试了几次,服务器也无法到达客户端。这可能是什么原因?请告诉我如何处理这个问题
  • 你的服务器和客户端之间有防火墙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多