我们开发了一个Java应用程序,它将几个UDP数据报发送到同一个目标IP地址。显然,目标端口始终是相同的,但我们似乎无法将源端口设置为在每个数据报上保持相同。
如果我们发送的数据包大于MTU,则包在相同的源端口上正确分割,但是一旦我们发送新的数据包,源端口就会发生变化,生成新的防火墙会话(网络管理员警告我们非常糟糕)由于应用程序正在生成的会话数量。)
现在我们正在使用以下声明发送包:
我们尝试了多种方法,结果总是一样,我们似乎无法将源端口设置为固定值。
编辑 - 粘贴实际代码:
if(Convert.ToString(var) == "something")
{
//code
}
谢谢你的时间!
答案 0 :(得分:2)
我认为您的问题是您正在关闭实际的DatagramSocket
而不是重复使用相同的内容,只需拨打socket.send(DatagramPacket)
即可。如果您不能打开客户端套接字,那么您甚至可以定义客户端端口,如:DatagramSocket clientSocket = new DatagramSocket(9743);
,因此每次调用新的clientSocket时,它将获得相同的端口,否则将抛出java.net.BindException: Address already in use: Cannot bind
这不会解决网络会话问题,因为您正在打开一个新的UDP套接字。此外,我怀疑你的网络管理员,看到以前的会话,因为你根本没有关闭UDP套接字,只是产生它们
答案 1 :(得分:0)
源端口是一个临时端口,由底层网络实现为您生成。没有理由将其设置为特定的端口号。
答案 2 :(得分:0)
如@AntJavaDev所述
解决方案是:
1.-保持DatagramSocket打开 2.-在参数中传递src端口 3.-将未封闭的DatagramSocket重新用于每个新数据包到同一目的地!
全部谢谢!