当前位置: 首页 > 知识库问答 >
问题:

Java:从同一 UDP 端口重复发送或为 UDP Socket.send() 指定本地端口

萧琛
2023-03-14

是否可以在多个套接字上使用同一端口。send()或在创建DatagramSocket时指定端口?如果是,如何。我正在尝试打孔,需要从使用的端口监听,我无法更改客户端发送的端口。

try {
        DatagramSocket dSocket = new DatagramSocket();
        InetAddress serverAddr = InetAddress.getByName(TARGETIP)
        int msg_len = currentMsg.length();
        byte[] message = currentMsg.getBytes();
        DatagramPacket dPacket = new DatagramPacket(message,msg_len,serverAddr,3222);
        dSocket.send(dPacket);
        updateConversationHandler.post(new systemUIUpdate("UDP Packet from " + dSocket.getLocalPort()));
}
catch (Exception e){
    e.getMessage();
    e.printStackTrace();
}

每次通过eventhandler d socket . getlocalport()运行时显示不同的端口。

共有2个答案

太叔志尚
2023-03-14

当然可以。您每次都在创建一个新的套接字,而且从不关闭它,所以端口仍在使用,所以新套接字会得到一个新端口。

如果您想要相同的端口,请使用相同的套接字。

籍永安
2023-03-14

是的,你可以。根据你想做什么,有两种解决方案

>

  • 如果您想从随机端口发送数据包,但每次都是从同一端口发送,请不要像前面的回答中提到的那样关闭套接字。

    如果您甚至想选择要从中发送的端口,请将数据报套接字创建为:

    DatagramSocket dSocket=新的DatagramSocket(CLIENT_PORT);

  •  类似资料:
    • 我正在Unity中制作一个游戏,我试图将数据从客户端发送到服务器并返回到客户端(试图保存实例),但当我收到数据并尝试将数据发送回客户端时,它表示udp客户端未连接。 它成功地将数据从我的Unity客户端发送到服务器,但一旦它到达那里,套接字就会断开连接,我就无法返回任何内容。正如你所看到的,我试图设置一些多播选项,但它似乎不能正常工作。 客户: 服务器: 因此,服务器中UdpClient的实例会保

    • 我需要连接到MongoDB通过SSH隧道和JSch端口转发抛出一个错误: 无法绑定本地端口127.0.0.1:27017 我必须通过SSH隧道连接到MongoDB。我在stackoverflow上找到了代码,它解决了我的问题。但几周后,同样的代码停止了工作。我无法确定原因。此外,使用我在Java代码中使用的相同凭据,我还尝试使用SSH-L命令通过CMD连接到相同的凭据,并且工作正常。我还可以使用N

    • null 因此,发生的事情可以在环回中解决,但不会通过ssh隧道。如何从docker调用,使其通过ssh隧道? 附:我用的是macOS High Sierra

    • 本教程将介绍如何配置Apache以监听指定地址和端口。 当Apache启动时,它会绑定到本地计算机上的某个端口和地址,并等待传入的请求。默认情况下,它会监听计算机上的所有地址。但是,可能需要告知监听特定端口,或仅监听选定地址,或两者的组合。这通常与虚拟主机功能结合使用,后者确定Apache如何响应不同的IP地址,主机名和端口。 指令告诉服务器仅接受指定端口或地址和端口组合的传入请求。如果在指令中仅

    • Docker命令将Docker端口发布到。但是当我需要发布两个端口时如何处理和?

    • 问题内容: 我正在学习Java套接字编程。我使用以下语句连接到网站: 当我调试应用程序并查看s的内容时,我看到: 1)我想知道此本地端口7846的来源以及确切的含义。 2)如果网站的IP地址是2.21.246.97,为什么我不能仅在浏览器的地址栏中输入2.21.246.97来连接到该网站? 谢谢 问题答案: 这是本地套接字端口号。通常由系统分配。 请参阅什么是套接字?。 在客户端:客户端知道运行服