7

Posso ricevere pacchetti di trasmissione senza problemi all'interno di un'applicazione di Chrome per Windows. Tuttavia, quando prendo l'app e compilo usando gli strumenti Cordova/Crosswalk, non riesco a ricevere alcun pacchetto. Vedo tutti i pacchetti in wireshark. Il mio pacchetto viene trasmesso da: 172.24.0.42 e trasmesso su 172.24.255.255 (una trasmissione su 255.255.255.255 non funziona su Android, ma funziona sull'app di Windows Chrome).Come ricevere pacchetti di trasmissione UDP nell'app Chrome in esecuzione su Android

Questa è la mia (manifest.json):

"sockets":{ 
     "udp": { 
      "bind": "*" 
     } 
    }, 
    "permissions":["system.network" , "power"], 

Questo è il mio codice per la mia rete:

chrome.sockets.udp.create({}, function(socketInfo) { 
    socketId = socketInfo.socketId; 
    // Setup event handler and bind socket. 
    chrome.sockets.udp.onReceive.addListener(onReceive); 
    chrome.sockets.udp.bind(socketId, "0.0.0.0", 4213, function(result) { 
     if (result < 0) { 
      console.log("Error binding socket."); 
      return; 
     } 
    //chrome.sockets.udp.send(socketId, arrayBuffer, '127.0.0.1', 1337, function(sendInfo) { 
    // console.log("sent " + sendInfo.bytesSent); 
    // }) 
    //chrome.sockets.udp.setBroadcast(socketId, true, function(){}) 
    }); 
}); 

Questo è quando ricevo i pacchetti:

var onReceive = function(info) { 
    if (info.socketId !== socketId) 
     return; 
    chrome.sockets.udp.setPaused(socketId, true, function(){}); // Set socket paused; Essentially blocking 
    //console.log(); 

    ///processing of my packet 

    chrome.sockets.udp.setPaused(socketId, false, function(){}); //unpause socket 
}; 

Modifica: ho cercato di fare del mio meglio per capire perché non riesco a ricevere alcun pacchetto di trasmissione nell'app Chrome su Android. Sfortunatamente, mi sono imbattuto in un muro.

risposta

0

Avete installato il plugin cordova per chrome-sockets-udp?

Dal terminal alla base del progetto, digitare:

cordova plugin add cordova-plugin-chrome-apps-sockets-udp 
2

Il plugin Cordova per la cromo-apps-sockets-UDP non consentire le trasmissioni di essere ricevuti per impostazione predefinita. Tuttavia, con alcune modifiche al plug-in src localmente (vedere i passaggi seguenti) è possibile abilitare i messaggi broadcast da ricevere. Le informazioni di seguito sono state testate con successo su Android e spero che queste informazioni siano utili per gli altri che potrebbero avere difficoltà a ricevere i messaggi di trasmissione ricevuti.

1) Verificare se è stato installato il plugin Cordova per cromo-apps-sockets-UDP

cordova plugin list 

se si vede questa informazione, allora il plugin è già installato

cordova-plugin-chrome-apps-sockets-udp 1.2.2 "Chrome Apps Sockets UDP API" 

2) se non vedi il plugin elencato, quindi installalo:

cordova plugin add cordova-plugin-chrome-apps-sockets-udp 

3) Successivamente, assicurati di aver aggiunto il tuo plat forma: (es ionica sotto, PhoneGap ha il comando simile)

ionic platform android 

4) poi costruire per la vostra applicazione: (es ionica sotto, PhoneGap ha comando simile)

ionic build android 

5) ora diamo modificare il file src nella piattaforma Android. In un editor di testo o dal tuo IDE accedi alla directory <appname>/platforms/android/src/org/chromium e apri il file ChromeSocketsUdp.java. Cercare questo metodo void bind(String address, int port) e dopo questa riga channel.socket().setReuseAddress(true); aggiungere la seguente riga channel.socket().setBroadcast(true); e quindi salvare il file.

il metodo bind dovrebbe apparire come il qui sotto:

void bind(String address, int port) throws SocketException { 
    channel.socket().setReuseAddress(true); 
    channel.socket().setBroadcast(true); 
    channel.socket().bind(new InetSocketAddress(port)); 

    if (multicastSocket != null) { 
     bindMulticastSocket(); 
    } 
    } 

6) Eseguire l'applicazione per esempio ionic run android e trasmettere i messaggi udp ora devono essere ricevuti dall'applicazione Android.

NOTA: queste modifiche locali che hai apportato sopra verranno sovrascritte durante la prossima build. quindi se si è soddisfatti con il test risulta è quindi possibile modificare il file plug-src situato a <appname>/plugins/cordova-plugin-chrome-apps-sockets-udp/src/android/ChromeSocketsUdp.java

ecco il link Gist alle sezioni relativo codice dell'app ionica che ho scritto per testare la ricezione di trasmissioni UDP su Android gist.github.com/bfalzarano/e530ca80767a0aea71a145be44943941

+0

Ciao, grazie per la risposta esauriente. Ho aggiunto la riga 'channel.socket(). SetBroadcast (true);' a ChromeSocketsUdp.java nelle piattaforme e nelle directory dei plugin. Tuttavia, sono ancora in grado di ricevere solo pacchetti UDP non trasmessi. Potresti per favore condividere il tuo codice? – stepan

+0

@stepan che cosa stai usando per il tuo client udp per inviare pacchetti broadcast? Ho scritto un client nodo js udp per l'invio di pacchetti broadcast per rendere più facile la risoluzione dei problemi. assicurati anche di trasmettere alla sottorete locale come JParrish88 indica sopra per Android, ad es. se la sottorete locale è 192.168.0.x/24, l'indirizzo di broadcast deve essere 192.168.0.255. puoi votare la mia risposta se queste informazioni sono state utili? sarebbe utile un tutorial con il codice completo del server udp e alcuni screenshot? se è così lasciatemi mettere questo insieme e posso postare il link sopra nella mia risposta. – bfalz

+0

Sto usando https://packetsender.com/ e funziona davvero bene. Per essere sicuro che i miei pacchetti udp siano correttamente trasmessi ho anche scritto un semplice script python: https://gist.github.com/stepanmracek/c66c7d794cc856f1f1a1c88cb74100d6 – stepan