0

我正在编写一个从 HL/Team Fortress 2 服务器接收分数的 javascript/node.js 程序,但我似乎无法接收游戏服务器发送的 udp 数据包。(我可以接收由 UDP 测试工具传输的 udp 数据包)我找到了一个可以工作的 python 库,但它在从服务器接收数据之前使用了 socket.connect()。

Python snipplet(使用异步):

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数据包

4

1 回答 1

0

您需要使用该addMembership()方法加入多播组,在 UDP 中您不连接到服务器,永远不会创建连接,并且不能保证您将收到任何/所有数据包。您加入一个多播组并接收具有该组 ID 的数据包到达您的网卡,python 方法名称具有误导性。

http://nodejs.org/api/dgram.html#dgram_socket_addmembership_multicastaddress_multicastinterface

于 2013-07-29T17:07:36.050 回答