2013-07-29 5 views
0

HL/Team Fortress 2 서버에서 점수를받는 javascript/node.js 프로그램을 작성하고 있지만, 보내지는 UDP 패킷을받을 수 없습니다. 게임 서버. UDP 테스트 도구에서 전송 된 UDP 패킷을 수신 할 수 있습니다. 작동하는 파이썬 라이브러리를 발견했지만 서버에서 데이터를 받기 전에 socket.connect()를 사용합니다. (asyncore 사용)Node.js의 udp 소켓에 연결

파이썬 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); 

와이어 샤크로 촬영 한 UDP 패킷 당신은 서버에 연결하지 않는 UDP의 멀티 캐스트 그룹에 가입하기 위해 addMembership() 방법을 사용할 필요가 http://pastebin.com/W7i9CV2u

답변

0

하는 연결이 생성되지 않으며 모든/모든 패킷을받을 것이라고 보장 할 수 없습니다. 멀티 캐스트 그룹에 가입하고 해당 그룹 ID로 네트워크 카드에 도달하는 패킷을 수신하면 파이썬 메소드 이름이 오해의 소지가 있습니다.

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

+0

임 내가 오류 addMembership ('127.0.0.1')를 사용하는 경우 오류가 점점 : Node.js를 : 201 던져 전자; // 첫 번째 눈금에서 'error'이벤트 또는 process.nextTick 오류가 발생했습니다. ^ Error : getaddrinfo ENOENT at errnoException (dns.js : 31 : 11) at Object.onanswer [dcomplete as dns.js : 140 : 16) – Yannick

+0

Google 검색에서 node.js가 주소를 찾을 수 없을 때 ENOENT 오류 코드가 발생하는 것 같습니다. 멀티 캐스트 주소는 IP 주소가 아님을 이해해야합니다. 위키 피 디아에 따르면 유효한 멀티 캐스트 주소는 224.0.0.0에서 239.255.255.255까지이므로 127.0.0.1은 유효하지 않으므로 오류가 발생합니다. http://en.wikipedia.org/wiki/Multicast_address#IPv4 – Robadob

+1

여기에 멀티 캐스트 UDP가 포함되어있는 것처럼 보입니다. UDP의 다른 용도가 있습니다. – EJP