【发布时间】:2011-09-17 14:46:49
【问题描述】:
如果局域网上有两台或多台计算机通过 UDP 进行通信,它们是否都必须使用同一个端口才能相互接收消息?例如,假设我的桌面使用端口 1550 发送消息,而我的笔记本也在 LAN 上,使用端口 3746 侦听和接收消息。在这种情况下仅使用目标 IP 发送是否有效?如果没有,是否每台计算机都必须知道并指定接收方的端口?
【问题讨论】:
标签: c++ c networking udp
如果局域网上有两台或多台计算机通过 UDP 进行通信,它们是否都必须使用同一个端口才能相互接收消息?例如,假设我的桌面使用端口 1550 发送消息,而我的笔记本也在 LAN 上,使用端口 3746 侦听和接收消息。在这种情况下仅使用目标 IP 发送是否有效?如果没有,是否每台计算机都必须知道并指定接收方的端口?
【问题讨论】:
标签: c++ c networking udp
do they all have to be using the same port to be able to receive messages from one another
没有。服务器和客户端不需要使用相同的端口号;事实上,这通常是不可行的。但是每个发送者都必须知道所需接收者的端口号。在响应的情况下,源地址和端口随请求一起出现。在请求的情况下,客户端必须以某种方式已经知道服务器 ip:port。
【讨论】:
在应用层通信,必须指定目的ip和端口。 如果在底层(物理帧),您可以将帧发送到目的地。
【讨论】:
对于 UDP 或 TCP 端点,必须设置地址和端口。发起者必须知道要发送到哪个地址端口。接收方可以使用 getpeername() 调用来确定发送方的地址-端口组合,然后使用此信息构建回复消息的地址结构。两者不需要使用相同的端口号。
【讨论】:
UDP,在接收数据的同时使用recvmsg()获取发件人地址更为常见。