Данные, отправленные через сокет UDP, не получены - PullRequest
0 голосов
/ 26 мая 2019

Я новичок в WebRTC Android, используя jStun с кодом ниже, я могу получить Public IP и порт моих устройств Android.

    new Thread() {
        @Override
        public void run() {
            super.run();
            try {
                MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);
                ChangeRequest changeRequest = new ChangeRequest();
                sendMH.addMessageAttribute(changeRequest);
                byte[] data = sendMH.getBytes();
                s = new DatagramSocket(4500);
                s.setReuseAddress(true);

                DatagramPacket p = new DatagramPacket(data, data.length, InetAddress.getByName("stun.l.google.com"), 19302);
                s.send(p);

                DatagramPacket rp;
                rp = new DatagramPacket(new byte[32], 32);
                //Recieve Packet from Stun Server
                s.receive(rp);

                MessageHeader receiveMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingResponse);
                receiveMH.parseAttributes(rp.getData());
                final MappedAddress ma = (MappedAddress) receiveMH
                        .getMessageAttribute(MessageAttribute.MessageAttributeType.MappedAddress);

                //Show Public IP and Port On Text View
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        TextView myIp = findViewById(R.id.listeningIp);
                        TextView myPort = findViewById(R.id.listeningPort);
                        myIp.setText(ma.getAddress().toString());
                        myPort.setText(ma.getPort() + "");
                    }
                });


                while (true) {
                    byte[] b = new byte[1024];
                    DatagramPacket rr = new DatagramPacket(b, 0, b.length);
                    //This Recieve Aimed to Recieve from Laptop Packet Sender
                    s.receive(rr);
                    final String sss = new String(rr.getData());
                    Log.e("recieved", sss);

                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }.start();

Публичный IP-адрес и порт устройства Android: 39.41.148.77:4500

Но когда я отправляю пакет с программного обеспечения для отправки пакетов с ноутбука на Android (39.41.148.77:4400), он не был получен.

Любое руководство приветствуется. Спасибо

enter image description here

1 Ответ

0 голосов
/ 03 июня 2019

Выполнение запроса привязки STUN не позволяет вашему порту внезапно получать трафик от чего-либо другого, кроме общедоступного сервера STUN, которым вы только что обменялись пакетами.Для полного открытия порта обе конечные точки должны отправлять пакеты (несколько раз одновременно) с одного и того же локального порта на известные пары ip: port друг друга.

Все, что вам нужно знать, находится здесь:

Программирование приложения P2P

...