Я хотел бы установить соединение 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)
Ожидаемый результат - правильная доставка данных на обоих концах.