Как правильно установить UDP-соединение с интернетом - PullRequest
0 голосов
/ 03 мая 2019

Я хотел бы установить соединение UDP. Код, представленный ниже, был выполнен на двух разных машинах, в то время как маршрутизатор сервера перенаправлял весь трафик в локальную сеть. Он работал в UDP-реализации Python, в JS, похоже, не работает. Я пробовал многочисленные настройки переадресации портов маршрутизатора, вплоть до пересылки всего трафика со всех адресов и портов в локальную сеть, без какого-либо результата. Буду признателен за любую помощь по теме.

server.js

var PORT = 41986;
var HOST = 'address';
var dgram = require("dgram");

var server = dgram.createSocket("udp6");

server.on("error", function (err) {
  console.log("server error:\n" + err.stack);
  server.close();
});

server.on("message", function (msg, rinfo) {
    var message = msg.toString();
    console.log(message);
    server.send('worked', 0, message.length, rinfo.port, rinfo.address)
});

server.on("listening", function () {
    var address = server.address();
    console.log("server listening " +
      address.address + ":" + address.port);
});

server.bind(PORT, HOST);

client.js

var HOST = 'address';
var REMOTE_PORT = 41986;
var LOCAL_PORT  = 4001;

var dgram = require('dgram');


var client = dgram.createSocket('udp6');
client.bind(LOCAL_PORT);


var header = new Buffer.alloc(8,("Expect:" + 1))
client.send(header, 0, header.length, REMOTE_PORT, HOST,
    function() {
        client.on('message',function(arg) {
            let str = arg.toString();    
            console.log(str);
            clearTimeout(client._connectTimer);
            client.close();
        });
        client._connectTimer = setTimeout(function() {
            client.close();
        }, 1000);
}); 

Для справочного кода в Python, который на самом деле его вытащил.

ipv6client.py

import socket

UDP_IP = "address"  # localhost
UDP_PORT = 41986
MESSAGE = "Hello, World!".encode()

print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
print("message:", MESSAGE)

sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

ipv6server.py

import socket

UDP_IP = "address"
UDP_PORT = 41986

sock = socket.socket(socket.AF_INET6, # Internet
                 socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print("received message:", data)

Ожидаемый результат - правильная доставка данных на обоих концах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...