jok*_*oon 20 networking udp network-programming
我可以掌握TCP与UDP的概念,但我仍然不知道为什么有两种方式发送UDP数据包,并且我仍然不明白这是否是bind()和accept()的绝对必要. .
use*_*421 37
accept()用于TCP.它与UDP无关.
connect() 在UDP中没有对另一端做任何事情,它只是让本地API知道你要发送和接收谁.
如果您还不知道,或者不关心,或者想要使用相同的套接字发送到多个目的地,则不要使用connect(),而是使用sendto().同样适合接收.
例如,考虑UDP服务器.它会调用recvfrom(),所以它将获取源地址信息,处理请求,创建响应,并通过sendto().No connect()涉及任何地方将其发送到该地址,ergo无法使用send()或recv().
它只需要bind()服务器,因为客户端需要一个固定的端口号来发送.客户端根本不需要bind():send()/sendto()/recv()/recvfrom()使用系统分配的本地端口号在第一个上发生自动bind().
eno*_*ufs 14
重要的是要理解TCP是面向连接的,而UDP是无连接协议.
您通常会sendto()在UDP套接字上使用以指定目标.同样,您通常会recvfrom()用来知道从哪里接收UDP数据.
但是,您实际上可以connect()在UDP套接字上使用它作为选项.在这种情况下,您可以使用send()/recv()UDP套接字将数据发送到指定的地址,connect()并仅从该地址接收数据.(connect()UDP套接字仅设置默认对等地址,您可以connect()根据需要多次调用connect()UDP套接字,当然,UDP套接字不会执行任何连接握手.)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
22702 次 |
| 最近记录: |