为什么UDP服务器上的UDP客户端端口会改变

Man*_*ker 2 c++ sockets udp

我一直在关注此处找到的简单 UDP 服务器/客户端教程,并且我有一个关于客户端连接到服务器的端口的快速问题。

仅从代码来看,很明显服务器和客户端是通过端口 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
Run Code Online (Sandbox Code Playgroud)

服务器.cpp

#define BUFLEN 512  //Max length of buffer
#define PORT 8888   //The port on which to listen for incoming data
Run Code Online (Sandbox Code Playgroud)

然而,当我实际运行服务器和客户端时,服务器说客户端连接的端口总是不同的:

首次运行(服务器日志):

注意端口如何变化 注意端口是如何从 8888 变化的

第二次运行(服务器日志)

在此输入图像描述

再次注意端口如何变化

为什么连接的端口会从8888改变?

Bar*_*mar 5

客户端的评论不正确。他们只是从服务器复制了该行,但他们应该将其更改为:

#define PORT 8888   //The port to send outgoing data to
Run Code Online (Sandbox Code Playgroud)

客户端和服务器都将端口放入一个sockaddr_in结构中。服务器在调用时使用此结构bind()设置侦听端口。客户端在对 的调用中使用它sendto(),因此它设置目标端口。

因为客户从来不打电话bind()设置特定的本地端口,因此源端口是从临时端口范围中任意选择的。每个套接字都有一个不同的端口来区分它们。

如果使用固定端口作为客户端的本地端口,则同一台计算机上将无法拥有多个客户端,因为无法知道哪个客户端应该接收来自服务器的传入数据包。因此,固定端口通常用于服务器,随机端口用于客户端。