我正在编写一个javascript / node.js程序,它接收来自HL / Team Fortress 2服务器的分数,但我似乎无法接收游戏服务器发送的udp数据包。 (我可以收到UDP测试工具发送的udp数据包) 我找到了一个可以工作的python库,但它在从服务器接收数据之前使用了socket.connect()。
Python snipplet(使用asyncore):
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
self.bind(('0.0.0.0', 17015))
self.connect((IP of server, 27015))
data = self.recv(1400)
但是在node.js中我似乎无法连接到远程地址。
到目前为止我的代码:
var dgram = require('dgram')
var server = dgram.createSocket("udp4");
server.on('message', function (data, rinfo) {
data = data.toString();
if (data.startsWith('\xff\xff\xff\xff') && data.endsWith('\n\x00')) {
console.log(data);
Logparser(data);
} else {
console.log(data);
}
});
server.bind(17015);
使用wireshark http://pastebin.com/W7i9CV2u
捕获的UDP数据包答案 0 :(得分:0)
您需要使用addMembership()
方法加入多播组,在UDP中未连接到服务器,永远不会创建连接,并且无法保证您将收到任何/所有数据包。您加入多播组并接收具有到达您的网卡的group-id的数据包,python方法名称具有误导性。
http://nodejs.org/api/dgram.html#dgram_socket_addmembership_multicastaddress_multicastinterface