多播通訊需要如下三個條件:
(1)使用udp傳輸協議
(2)使用多播位址(224.0.0.1-239.255.255.255)
(3)另外需要中間的所有路由器都需要支援多播協議才可以。
需要注意的一點:
在msdn中關於setsockopt()函式有乙個注意事項:
noteif thesetsockoptfunction is called before thebindfunction, tcp/ip options will not be checked with tcp/ip until thebindoccurs. in this case, thesetsockoptfunction call will always succeed, but thebindfunction call can fail because of an earlysetsockoptfailing.
如果setsockopt函式設定tcp/ip協議層的選項,則需要在bind函式之後呼叫才會有效;如果在設定tcp/ip選項的情況下,先呼叫setsockopt,然後再呼叫bind函式,則bind函式會提示出錯!
傳送端:
傳送方直接往多播位址傳送資訊就可以,該資訊會由路由傳送到對該多播資訊感興趣的埠(該埠加入了多播組)
1. 建立udp套接字;
2.向多播位址傳送資訊;
setsockopt(sendsock, ipproto_ip, ip_multicast_ttl, (char *)&nttl, sizeof(int));
接收端:
接收端必須加入多播組才可以。這樣路由才會知道該埠對某個多播組的訊息感興趣,從而把資訊傳輸到該端點。
加入多播組是在ip協議層,即網路層進行設定的。
1.建立udp套接字;
2.繫結接收位址;
注意:這裡繫結的是本機的ip,埠是多播傳送的埠。直接繫結多播ip肯定會失敗的!
3.設定套接字的選項;
在c#中,有特定的multicastoption類,用以加入多播組時使用,並將該類物件作為套接字選項的值傳入。
(此時才用到多播組的ip)
具體為ip層協議(ipproto_ip)上的ip_add_memership(加入多播組)和ip_drop_membership(退出多播組)選項
注意:步驟2、3順序不能反,否則在呼叫setsockopt()函式時會出錯,出錯資訊為:wsaeinval
通過結構體ip_mreq(很好記,ip層,請求多播),例如(windows平台下)
ip_mreq mcast;
mcast.imr_inte***ce.s_un.s_addr=inaddr_any;
mcast.imr_multiaddr.s_un.s_addr=inet_addr("234.5.6.7");
Windows 套接字實現通訊
一 客戶機 伺服器模式 在tcp ip網路中兩個程序間的相互作用的主機模式是客戶機 伺服器模式 client server model 該模式的建立基於以下兩點 1 非對等作用 2 通訊完全是非同步的。客戶機 伺服器模式在操作過程中採取的是主動請示方式 首先伺服器方要先啟動,並根據請示提供相應服務 ...
Socket實現套接字通訊
套接字工作流程 import socket 1 買手機 phone socket.socket 2 繫結手機卡 phone.bind 127.0.0.1 8080 3 開機 phone.listen 5 4 等 連線 conn,addr phone.accept 5 收發訊息 data conn.r...
套接字通訊
利用三元組 ip位址,協議,埠 就可以標識網路的程序 socket即是一種特殊的檔案,一些socket函式就是對其進行的操作 讀 寫io 開啟 關閉 socket是 open write read close 模式的一種實現,那麼socket就提供了這些操作對應的函式介面 tcp通訊中的socket...