GNU/Linux >> Linux Esercitazione >  >> Linux

Come trasmettere il messaggio usando i socket UDP localmente?

Il server non dovrebbe essere associato a un indirizzo ottenuto da getaddrinfo , invece dovrebbe essere associato a 127.255.255.255 (per l'interfaccia di loopback).

Per un esempio già pronto di broadcast server/client vedere http://www.ccplusplus.com/2011/09/udp-broadcast-client-server-example.html


I socket di dominio Unix non supportano il multi-/broadcasting.

Puoi trasmettere sull'interfaccia locale 127.0.0.1.


Sebbene la domanda originale non lo dica esplicitamente, credo che il richiedente originale volesse "trasmettere" a più applicazioni in esecuzione sulla stessa istanza del sistema operativo (stesso computer per i vecchi timer).

Ciò è supportato dall'uso di "SO_REUSEADDR" nell'esempio del listener, dai commenti successivi di Yuvi e infine dal suggerimento di utilizzare il multicast IP.

La domanda originale dovrebbe essere chiarita.

Credo che la distribuzione dei pacchetti con più raccoglitori su una singola porta UDP vari tra i sistemi operativi quando si utilizza SO_REUSEADDR. La mia esperienza su Windows recente è che un singolo "raccoglitore" riceve esclusivamente tutti i pacchetti fino a quando non rilascia il suo collegamento, a quel punto, un altro il raccoglitore viene scelto e presenta tutti i pacchetti ricevuti, fino a quando non viene rilasciato, e così via...

Questo apparentemente differisce dai recenti kernel Linux, come spiegato in questo link:https://stackoverflow.com/a/14388707/86375Quella pagina sembra affermare che Linux riceverà i pacchetti round-robin tra più raccoglitori.

Il risultato finale, se speri di inviare a molti utilizzando un singolo datagramma inviato come ha fatto il poster originale e tenti di utilizzare IP unicast, non IP multicast, potresti rimanere deluso. (La mia esperienza e il collegamento sopra mostra che puoi eseguire il multi-bind, ma ciò non implica la consegna multipla dei datagrammi ricevuti, né su Linux né su Windows)

Il poster originale avrebbe dovuto provare a usare il multicast.


Linux
  1. Come eseguire Ssh su un server utilizzando un altro server??

  2. Come inviare un messaggio Xmpp utilizzando la riga di comando?

  3. CentOS / RHEL 6:come configurare il repository yum utilizzando un DVD montato localmente

  4. Come tracciare gli script Python usando trace.py

  5. Quanto di Linux dovrei imparare per implementare siti Web utilizzando LAMP?

Come condividere file localmente su Linux utilizzando NitroShare

Come montare Dropbox in locale utilizzando Rclone in Linux

Come montare Google Drive in locale utilizzando Rclone in Linux

Come inviare e-mail in locale utilizzando il prompt dei comandi

Procedura:un'introduzione all'uso di Git

Come connettersi a MySQL usando PHP