我有一个线程,它使用以下设置定期发送数据报包:
DatagramSocket mySocket;
try {
mySocket = = new DatagramSocket(9999);
mySocket.connect(new InetSocketAddress(dstAddress, dstPort));
} catch (SocketException e) {
e.printStackTrace();
return;[![enter image description here][1]][1]
}
byte[] sentPacketBuffer = new byte[1];
DatagramPacket sentPacket = new DatagramPacket(sentPacketBuffer, sentPacketBuffer.length);
对于send
方法的每次调用:
mySocket.send(sentPacket);
我在接收方获得了不同的source port
。
我查看this question,但答案实际上与为侦听器端设置源端口有关。
有没有办法让源端口(发件人)持久?
修改
我使用Android的VPNService捕获收到的数据包,然后将它们转发给Wireshark:
正如您所看到的,只有1个数据包具有正确的源端口。
然后我发现它可能与目标IP有关。无法从此设备访问目标IP。
如果我确实可以使这个地址可达(通过连接到192.168.49.1,并且在同一子网中有一个接口),我将获得所有数据包的正确源端口:
所以,我现在的问题是为什么目标可达性(或可用接口)与源端口相关?
答案 0 :(得分:0)
你错了。此代码发送的数据报的源端口始终为9999。
NB继续使用相同的套接字。每个数据报创建和销毁一个新数据报毫无意义。