2013-09-23 55 views
2

我只在Windows 7 節點6,8不失敗,它工作在linux下10.5的NodeJS得到一個UDP綁定錯誤EINVAL UDP綁定。至少這是令人討厭的,因爲我在Windows下做了所有的基礎開發。一個odf的大節點的優勢。EINVAL的NodeJS誤差在Win 7

綁定調用(在新的異步形式)失敗,而且在發送方法的固有綁定失敗。 其實我只想發送數據(廣播),所以我通常不會綁定套接字,但是,發送方法會自動執行此操作。我通過使用綁定方法驗證了這一點,並且這也失敗了。

Created Dgram socket 255.255.255.255:3001 

events.js:72 
     throw er; // Unhandled 'error' eve 
      ^
Error: bind EINVAL 
    at errnoException (dgram.js:440:11) 
    at dgram.js:207:28 
    at dns.js:72:18 
    at process._tickCallback (node.js:415: 

從錯誤堆棧:當地址被指定爲地址而不是字符串時,爲什麼使用DNS的發送調用?

可有人請覈實發送Windows 7上作品10.5 千恩萬謝

回答

1

看來,你不能設置廣播標誌,直到數據報被綁定到指定端口後(端口綁定到端口如果您在發送之前不綁定它,則爲0)。以下代碼片段顯示瞭如何實現邏輯。

var client = dgram.createSocket("udp4"); 

console.log('binding'); 
client.bind(0); 

client.on('listening', function() { 

    console.log('setting broadcast flag'); 
    client.setBroadcast(true); 

    console.log('sending'); 
    client.send(message, 0, message.length, 41234, '255.255.255.255', function (err, bytes) { 
     console.log("Sent message: " + err); 
     client.close(); 
    }); 
});