2015-05-21 4 views
3

Я пытаюсь подключить UDP-сервер, работающий на Node.js с помощьюUdp сокет Ошибка привязки

int socketDs = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); 

struct sockaddr_in socket; 
memset(&socket, 0, sizeof(socket)); 
socket.sin_family = AF_INET; 
socket.sin_addr.s_addr = inet_addr("SERVER.IP"); 
socket.sin_port = htons(PORT); 

long r = bind(socketDs, (struct sockaddr *)&socket, sizeof(socket)); 
NSLog(@"Sockect bind: %ld %s", r, strerror(errno)); 

не удалось выполнить привязку к нему, возвращается с Can't assign requested address. Однако sendto отлично работает без привязки к нему.

В чем может быть проблема. Кроме того, я не получаю «закрыть» событие на Node.js

Вот мой код сервера

var dgram = require("dgram"); 
var server = dgram.createSocket("udp4"); 

var clients = new Array(); 

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

server.on("message", function (message, remote) { 
    console.log(remote.address + ':' + remote.port +' - ' + message); 
    } 
}); 

server.on("close") { 
    console.log("close"); 
}); 

server.on("error") { 
    console.log("error"); 
}); 

server.bind(PORT); 
+0

Покажите нам определение 'SERVER.IP' –

+0

Действительно IPv4 ip как" xxx.xxx.xxx.xxx " –

+0

@DawoodMujib Почему бы не показать его значение? Скорее всего, вы находитесь за NAT и привязываетесь к локальному адресу, так что это не похоже на то, что мы узнаем ваш публичный IP-адрес. – szczurcio

ответ

0

Первый кусок кода, вы упомянули, что клиента. И вы пытаетесь привязаться к SERVER_IP. Это, очевидно, приведет к ошибке bind, которую вы видите. Вы пытаетесь привязать клиента к IP-адресу, принадлежащему внешней системе.

И sendto прекрасно, потому что на стороне клиента подразумевается неявное связывание.

Клиенты не обязательно bind явно. Вы можете покончить с этой частью.

Смежные вопросы