Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UDP正在检索另一个对等方的端口号(Java)_Java_Sockets_Udp_Peer - Fatal编程技术网

UDP正在检索另一个对等方的端口号(Java)

UDP正在检索另一个对等方的端口号(Java),java,sockets,udp,peer,Java,Sockets,Udp,Peer,我正在开发一个使用UDP的聊天应用程序。获取另一个对等方的端口号时出现问题。我可以获取对等方的主机地址,但无法获取响应/请求来自的端口。可以获取向我发送请求/响应的对等方的端口号 这是我的密码: private Thread bcastListen = new Thread(PeerDiscovery.class.getSimpleName() + " broadcast listen thread") { @Override public void run()

我正在开发一个使用UDP的聊天应用程序。获取另一个对等方的端口号时出现问题。我可以获取对等方的主机地址,但无法获取响应/请求来自的端口。可以获取向我发送请求/响应的对等方的端口号

这是我的密码:

private Thread bcastListen = new Thread(PeerDiscovery.class.getSimpleName()
        + " broadcast listen thread") {
    @Override
    public void run() {
        try {

            byte[] buffy = new byte[5];
            buffy[2] = (byte) 4000;
            DatagramPacket rx = new DatagramPacket(buffy, buffy.length);

            while (!shouldStop) {
                try {
                    buffy[0] = 0;

                    bcastSocket.receive(rx);

                    int recData = decode(buffy, 1);
                    if (buffy[0] == QUERY_PACKET && recData == group) {
                        byte[] data = new byte[5];
                        data[0] = RESPONSE_PACKET;
                        encode(peerData, data, 1);
                        DatagramPacket tx
                                = new DatagramPacket(data, data.length, rx.getAddress(), port);
                        System.out.println(peerData);
                        lastResponseDestination = rx.getAddress();
                        bcastSocket.send(tx);
                    } else if (buffy[0] == RESPONSE_PACKET) {
                        if (responseList != null && !rx.getAddress().equals(lastResponseDestination)) {
                            synchronized (responseList) {
                                responseList.add(new Peer(rx.getAddress(), rx.getPort())); //here am trying to get  the port of the host which the response came from (Doesn't work)
                            }
                        }
                    }
                } catch (SocketException se) {
                    System.out.println("Some exception");
                }
            }

            bcastSocket.disconnect();
            bcastSocket.close();
        }

谢谢您的时间。

传入数据报的源地址可通过
DatagramPacket.getPort()
获得

但不是港口

我不知道为什么不能。你是否考虑咨询JavaDoc?

注意:做你正在做的事情的简单方法就是发送收到的数据包。不需要再建造一个

bcastSocket.disconnect();
您尚未调用
bcastSocket.connect()
,因此这行代码是无效的。移除它