我一直在关注一个简单的 UDP 服务器/客户端教程,发现here http://www.binarytides.com/udp-socket-programming-in-winsock/,我有一个关于客户端连接到服务器的端口的快速问题。
仅从代码来看,很明显服务器和客户端是通过端口 8888 连接的:
客户端.cpp
#define SERVER "127.0.0.1" //ip address of udp server
#define BUFLEN 512 //Max length of buffer
#define PORT 8888 //The port on which to listen for incoming data
服务器.cpp
#define BUFLEN 512 //Max length of buffer
#define PORT 8888 //The port on which to listen for incoming data
然而,当我实际运行服务器和客户端时,服务器说客户端连接的端口总是不同的:
首次运行(服务器日志):
Note how the port changes from 8888
第二次运行(服务器日志)
注意端口如何再次变化
为什么连接的端口会从8888改变?
客户端的评论不正确。他们只是从服务器复制了该行,但他们应该将其更改为:
#define PORT 8888 //The port to send outgoing data to
客户端和服务器都将端口放在一个sockaddr_in
结构。服务器在调用时使用此结构bind()
,设置监听端口。客户端在调用中使用它sendto()
,因此它设置了目标端口。
因为客户从来不打电话bind()
要设置特定的本地端口,可以从临时端口范围中任意选择源端口。每个套接字都有一个不同的端口来区分它们。
如果使用固定端口作为客户端的本地端口,则同一台计算机上将无法拥有多个客户端,因为无法知道哪个客户端应该接收来自服务器的传入数据包。因此,固定端口通常用于服务器,随机端口用于客户端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)