2009-06-15 32 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消息的错误。