C 廣播程式

2021-05-26 20:31:53 字數 2368 閱讀 1882

前言

在網路程式設計中,通過廣播和多播可以實現傳送端傳送乙個資料報,有多個接收端接收的情況。

廣播

由於tcp是有連線的,所以不能用來傳送廣播訊息。傳送廣播訊息,必須用到udp,udp可以不用建立連線而傳送訊息。廣播訊息的目的ip位址是一種特殊ip位址,稱為廣播位址。廣播位址由ip位址網路字首加上全1主機字尾組成,如:192.168.1.255是192.169.1.0這個網路的廣播位址;130.168.255.255是130.168.0.0這個網路的廣播位址。向全部為1的ip位址(255.255.255.255)傳送訊息的話,那麼理論上全世界所有的聯網的計算機都能收得到了。但實際上不是這樣的,一般路由器上設定拋棄這樣的包,只在本地網內廣播,所以效果和向本地網的廣播位址傳送訊息是一樣的。

c#中傳送廣播訊息的過程如下,注意要呼叫setsockoption函式,不然要丟擲異常:

socket sock = new socket(addressfamily.internetwork, sockettype.dgram,

protocoltype.udp);

ipendpoint iep1 = new ipendpoint(ipaddress.broadcast, 9050);

ipendpoint iep2 = new ipendpoint(ipaddress.parse("192.168.1.255"), 9050);

string hostname = dns.gethostname();

byte data = encoding.ascii.getbytes(hostname);

sock.setsocketoption(socketoptionlevel.socket,

socketoptionname.broadcast, 1);

sock.sendto(data, iep1);

sock.sendto(data, iep2);

sock.close();

c#中接收廣播訊息的過程如下,沒有什麼特別的:

socket sock = new socket(addressfamily.internetwork,

sockettype.dgram, protocoltype.udp);

ipendpoint iep = new ipendpoint(ipaddress.any, 9050);

sock.bind(iep);

endpoint ep = (endpoint)iep;

console.writeline("ready to receive…");

byte data = new byte[1024];

int recv = sock.receivefrom(data, ref ep);

string stringdata = encoding.ascii.getstring(data, 0, recv);

console.writeline("received:  from: ",

stringdata, ep.tostring());

data = new byte[1024];

recv = sock.receivefrom(data, ref ep);

stringdata = encoding.ascii.getstring(data, 0, recv);

console.writeline("received:  from: ",

stringdata, ep.tostring());

sock.close();

attentions:
1 廣播可以由客戶程式來通知子網內的服務程式,自己的位置。
2 傳送廣播訊息時指定的埠也是有作用的,接收端的udp socket如果bind到此介面的話,就能夠接收到訊息。(如果不bind的話,就能接收所有埠的訊息??)

3 接收端接到的包中顯示的遠端ip位址是傳送端的位址。就是說廣播位址不會顯示到乙個包的源ip位址位置(loopback位址不會顯示到包的目的ip位址位置)

4 可以用執行緒不停地傳送和接收廣播訊息,確認兩端的位置和證明自己的存在

C 廣播程式

前言 在網路程式設計中,通過廣播和多播可以實現傳送端傳送乙個資料報,有多個接收端接收的情況。廣播 由於tcp 是有連線的,所以不能用來傳送廣播訊息。傳送廣播訊息,必須用到 udp,udp可以不用建立連線而傳送訊息。廣播訊息的目的 ip位址是一種特殊 ip位址,稱為廣播位址。廣播位址由 ip位址網路字...

C 廣播通訊

單播 點對點 通訊,即網路中單一的源節點傳送封包到單一的上的節點。在廣播通訊中,網路層提供了將封包從乙個節點傳送到所有其他節點的服務。利用廣播 broadcast 可以將資料傳送給本地子網上的每個機器。廣播的缺點是如果多個程序都傳送廣播資料,網路就會阻塞。1.服務端 using system usi...

有序廣播,粘性廣播

1.註冊多個receiver,要同時使用同乙個action,設定priority來指定優先順序。2.傳送有序廣播 sendorderedbroadcast intent,null intent intent newintent www.wangpeng intent.putextra name 我是...