onemouth
onemouth

Reputation: 2277

How to do UDP broadcast using chrome.sockets.udp API?

I am developing a Chrome extension and I want to broadcast a UDP packet on the local network.

I studied this Chrome API.

 chrome.sockets.udp.create({}, function(s){   
        chrome.sockets.udp.bind(s.socketId, address, 0, function(ret){
            chrome.sockets.udp.send(s.socketId, data, "172.16.0.0", 5019, 
                function(sendinfo){console.log(data.byteLength); console.log(sendinfo);})})})

If I specified a address like 172.16.0.0, the above code is OK. But If I changed 172.16.0.0 to 255.255.255.255, I got {resultCode: -10} which indicates an error.

My manifest.json:

{
  "manifest_version": 2,
  "name": "UDP",
  "description": "Test",
  "version": "2",
  "minimum_chrome_version": "23",
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  },
  "sockets":{
    "udp": {"send":["*:*"], "bind":["*:*"]}
  }, 
  "permissions":["system.network"]
}

By the way, I tried chrome.socket which works fine even on broadcast. But the API is deprecated starting with Chrome 33.

Upvotes: 10

Views: 5200

Answers (2)

onemouth
onemouth

Reputation: 2277

Since Chrome 44, we have setBroadcast API.

https://developer.chrome.com/apps/sockets_udp#method-setBroadcast

Upvotes: 5

Yuval Aviguy
Yuval Aviguy

Reputation: 51

Haven't tried it yet, but I found this:

"sockets": {
  "udp": {
    "bind": "*",
    "send": "*",
    "multicastMembership": ""
  }
}

In this bug report

The empty string value for "multicastMembership" isn't obvious at all, I had to resort to reading the C++ unit tests to find out the correct value.

Upvotes: 2

Related Questions