Udp套接字绑定失败

时间:2015-05-21 07:57:28

标签: ios c node.js sockets

我正在尝试使用

连接在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工作正常,没有绑定它。

可能是什么问题。此外,我没有得到关闭' event to 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);

1 个答案:

答案 0 :(得分:0)

您提到的第一段代码是客户端代码。而你正试图绑定到SERVER_IP。这显然会导致您看到bind错误。您正试图将客户端绑定到属于外部系统的IP。

sendto很好,因为客户端有隐式绑定。

客户端无需bind显式。你可以取消那部分。