2009-06-15 31 views
1

我正在C(單播)創建一個UDP套接字客戶端,並想知道爲什麼recvfrom()有一個struct sockaddr *參數,其中在手冊頁說, 空指針,或指向一個sockaddr結構,其中發送地址將被存儲。可以UDP(單播客戶端)recvfrom()除sendto()之外的其他服務器嗎?

是否有可能從另一臺服務器接收到一條消息,而不是我發送的消息?如果是,如何創建這種情況?

如果不是,說這個參數僅在使用廣播模式時有用嗎?

回答

2

是的,這是完全可能的。原因是UDP不是基於流的,而是基於數據包的。每個數據包都沒有任何歷史記錄(其他數據包發送或接收)。

因此,您也可以打開UDP端口,然後將數據包發送到不同的主機。不過,我不記得這個API支持多好。

-1

考慮到你總是在UDP中有兩方,似乎很明顯有人必須先recvfrom()。

0

UDP套接字將recvfrom()任何主機發送到該用一個正確的端口,除非你明確地connect(),在這種情況下,你可以write()read(),並獲得在收到ICMP消息的錯誤。