我正在用C(单播)创建一个UDP套接字客户端,并想知道为什么recvfrom()有一个struct sockaddr *参数,其中在手册页中说, 空指针,或指向要存储发送地址的sockaddr结构。
我是否有可能从我发送的服务器以外的其他服务器收到消息?如果是,如何创建此方案?
如果不是,说这个参数仅在使用广播模式时才有用吗?
答案 0 :(得分:2)
是的,这是完全可能的。这样做的原因是UDP不是基于流的,而是基于数据包的。处理每个数据包时没有任何历史记录(发送或接收其他数据包)。
出于这个原因,您也可以打开UDP端口,然后从中将数据包发送到不同的主机。但是,我不记得API如何支持它。
答案 1 :(得分:0)
UDP套接字将recvfrom()
任何主机发送到具有正确端口的主机,除非您明确connect()
,在这种情况下您只能write()
和read()
,并获取收到ICMP消息时出错。
答案 2 :(得分:-1)
考虑到你在UDP中总是有两方,似乎很明显有人必须首先recvfrom()。