在udp套接字上设置源端口

时间:2016-12-01 10:45:44

标签: java sockets

我们开发了一个Java应用程序,它将几个UDP数据报发送到同一个目标IP地址。显然,目标端口始终是相同的,但我们似乎无法将源端口设置为在每个数据报上保持相同。
如果我们发送的数据包大于MTU,则包在相同的源端口上正确分割,但是一旦我们发送新的数据包,源端口就会发生变化,生成新的防火墙会话(网络管理员警告我们非常糟糕)由于应用程序正在生成的会话数量。)

现在我们正在使用以下声明发送包:

我们尝试了多种方法,结果总是一样,我们似乎无法将源端口设置为固定值。

编辑 - 粘贴实际代码:

  if(Convert.ToString(var) == "something")
  {
  //code
  }

谢谢你的时间!

3 个答案:

答案 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重新用于每个新数据包到同一目的地!

全部谢谢!