我正在创建一个服务器(现在称为 Server1),它正在与我拥有的另一台服务器(现在称为 Server2)进行通信。
- Server1 向 Server2 发送数据报包。
- Server2 应该发回两个数据报包,但我只收到一个。
- Server2 没有问题,发送了两个包。
我使用 Wireshark 嗅探离开和到达 Server1 的包。
Package one(from wireshark): "5955 11994.023974 192.168.1.3 192.168.1.2 UDP Source port: 50000 Destination port: 50004"
Package two(from wireshark): 5958 11994.045830 192.168.1.3 192.168.1.2 ICMP Destination unreachable (Port unreachable)
Server1 运行一个正在监听数据报包的线程。
代码服务器1:
while (m_keepRunning)
{
try
{
TermMsg receivedMessage = null;
receivedMessage = receive(); //See this function further down
if (receivedMessage != null)
{
if (receivedMessage.getMsgType().equals(TermMsgType.ACK))
{
System.out.println("This is an ack!");
}
else
{
System.out.println("This is a response");
}
}
else
{
System.out.println("This is nothing");
}
}
接收函数:
private TermMsg receive() throws IOException, TermMsgException
{
byte[] inBuf = new byte[BUF_SIZE_RX];
DatagramPacket inData = new DatagramPacket(inBuf, BUF_SIZE_RX);
if(true == firstEncounter)
{
StartMessage startReq = getStartMsg(false);
DatagramPacket p = makeDatagramP(startReq);
socket.send(p);
firstEncounter = false;
}
socket.receive(inData);
if (inData.getLength() > 0)
{
Msg msg;
try
{
msg = Msg.createFromUdp(inData.getData());
return msg;
}
catch (TermMsgException e1)
{
return null;
}
}
else
{
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
}
return null;
}
}
有人知道吗? 顺便说一句...我也使用:
DatagramSocket socket;
try {
socket = new DatagramSocket(50004);
}
我是否必须使用服务器套接字来让它监听多个数据报包?
总结: - 端口不可达 - 收不到二号包裹
希望有人能帮助我。 提前致谢
最佳答案
第一个问题,正如问题的评论中已经提到的,您假设以下两行是正在发送的两个 UDP 数据包。
Package one(from wireshark): "5955 11994.023974 192.168.1.3 192.168.1.2 UDP Source port: 50000 Destination port: 50004"
Package two(from wireshark): 5958 11994.045830 192.168.1.3 192.168.1.2 ICMP Destination unreachable (Port unreachable)
事实上,这可能是一个不完整的跟踪,因为它显示了两个包:
Package one(from wireshark): "5955 11994.023974 192.168.1.3 192.168.1.2 UDP Source port: 50000 Destination port: 50004"
这是一个UDP数据包,从server2(192.168.1.3)到server1(192.168.1.2)。它被发送到服务器 1 上的端口 50004。
Package two(from wireshark): 5958 11994.045830 192.168.1.3 192.168.1.2 ICMP Destination unreachable (Port unreachable)
这是一条从服务器 2 发送到服务器 1 的控制消息,说明由于目标端口未打开,先前的数据包无法传送。这是先前从服务器 1 到服务器 2 的数据包传递尝试的答案,但没有成功。这可能有助于解释为什么您没有收到预期的所有数据包?
关于java - java 套接字问题,不会监听多个数据报包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117221/