节点SSDP客户端未找到服务器广播

时间:2017-03-26 00:36:09

标签: node.js sockets networking udp ssdp

我已实施node-ssdpnpm install node-ssdp)的服务器/客户端实施。一切"出现"工作但我的客户端没有拿起服务器的数据包。我从不同的设备/位置接收了很多其他有效负载,但没有收到来自node-ssdp服务器的有效负载。

我在同一台机器上运行,而且我在OSX上运行。我有两个独立的节点项目:一个用于我的客户端,另一个用于我的服务器。

注意:我还尝试在一台计算机上运行服务器,并在另一台计算机上运行客户端,以防出现环回或其他问题。我还通过Wireshark验证了客户端计算机正在读取服务器的数据包。它正在标题中发送NOTIFY * HTTP/1.1

以下是我对客户端和服务器的实现:

服务器

var SSDP = require('node-ssdp').Server
, server = new SSDP({
location: 'http://' + require('ip').address() + ':33333',
ssdpPort: 33333
})
console.log(require('ip').address())
server.addUSN('upnp:rootdevice')
server.addUSN('urn:schemas-upnp-org:device:MediaServer:1')
server.addUSN('urn:schemas-upnp-org:service:ContentDirectory:1')
server.addUSN('urn:schemas-upnp-org:service:ConnectionManager:1')

server.on('advertise-alive', function (heads) {
  console.log('advertise-alive', heads)
  // Expire old devices from your cache.
  // Register advertising device somewhere (as designated in http headers heads)
})

server.on('advertise-bye', function (heads) {
  console.log('advertise-bye', heads)
  // Remove specified device from cache.
})

// start server on all interfaces
console.log('starting ssdp server')
server.start()

客户端

var ssdp = require('node-ssdp').Client
  , client = new ssdp({
})

client.on('notify', function () {
  //console.log('Got a notification.')
})

client.on('response', function inResponse(headers, code, rinfo) {
  console.log('Got a response to an m-search:\n%d\n%s\n%s', code, JSON.stringify(headers, null, '  '), JSON.stringify(rinfo, null, '  '))
})

client.search('ssdp:all')

// And after 10 seconds, you want to stop
setTimeout(function () {
   client.stop()
}, 10000)

我的想法已经不多了。这很奇怪,因为我之前已经实现了UDP组播解决方案,但它确实有效。根据我的理解,SSDP是幕后的UDP组播。

1 个答案:

答案 0 :(得分:0)

从github问题本身,显然在配置中添加sourcePort解决了这个问题。 https://github.com/diversario/node-ssdp/issues/75#issuecomment-292054892