gpt4 book ai didi

java - 在 udp 套接字上设置源端口

转载 作者:行者123 更新时间:2023-11-30 02:43:36 26 4
gpt4 key购买 nike

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

现在我们正在发送带有以下声明的包裹:

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

编辑-粘贴实际代码:

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;
}

感谢您的宝贵时间!

最佳答案

我认为你的问题是你正在关闭实际的 DatagramSocket而不是重复使用相同的,只需调用 socket.send(DatagramPacket) 。如果您无法保持客户端套接字打开,那么您甚至可以定义客户端端口,例如: DatagramSocket clientSocket = new DatagramSocket(9743);所以每次你调用一个新的 clientSocket 时,它都会获得相同的端口,否则会抛出 java.net.BindException: Address already in use: Cannot bind

这不会解决网络 session 问题,因为您正在打开一个新的 UDP 套接字。另外我怀疑您的网络管理员看到了以前的 session ,因为您根本没有关闭 UDP 套接字,而只是生成它们

关于java - 在 udp 套接字上设置源端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com