使用套接字實現多播通訊

2021-06-01 06:00:20 字數 1517 閱讀 9691

多播通訊需要如下三個條件:

(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...