我们开发了一个Java应用程序,它将几个UDP数据报发送到相同的目标IP地址。很显然,目标端口始终是同一个端口,但我们似乎无法将源端口设置为在每个数据报上保持不变。
如果我们发送的数据包比MTU更大的包被正确分裂在同一源端口,但是一旦我们发送一个新的数据包的源端口的变化,产生了新的防火墙会话(其中网络管理员已经警告我们要由于应用程序产生的会话数量非常差)。在udp套接字上设置源端口
现在,让我们用下面的语句发送包:
我们试过多种方法,结果总是相同的,我们似乎无法能够将源端口设置为固定值。
编辑 - 粘贴实际代码:
private boolean sendImage(byte[] imageData, InetAddress address,
int port) throws UnknownHostException, SocketException {
boolean ret = false;
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(imageData, imageData.length, address, PUERTO_UDP);
socket.send(dp);
ret = true;
} catch (IOException e) {
Main.lanzarExcepcion(e);
ret = false;
} finally {
if (socket != null) {
socket.close();
}
}
return ret;
}
感谢您的时间!
嗯我想,在这之前的UDP套接字不紧密,所以操作系统正试图使先前端口尚不可用来打开一个新的连接,并打开了下一个可用的时间端口的变化。这是你的问题吗?因为我不能认为任何其他原因改变了客户端口。你也可以解释一下什么是'*,但是一旦我们发送一个新的数据包源端口改变*'意味着什么?你如何试图打开新的连接?在同一线程?在另一个过程中?你怎么关闭UDP套接字? – AntJavaDev
还您对'DatagramPacket'类的初始化,那并不显得那么正确的......甚至不知道如果得到所有 – AntJavaDev
的方式编制,以保持它总是相同的是始终从同一个插座发送,而不是显然每个请求创建一个新的套接字。 – EJP