gpt4 book ai didi

c++ - 为什么UDP服务器上的UDP客户端端口会发生变化

转载 作者:行者123 更新时间:2023-11-27 23:48:48 24 4
gpt4 key购买 nike

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

仅从代码来看,很明显服务器和客户端通过端口 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注意端口如何从 8888 更改

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

enter image description here

注意端口是如何再次变化的

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

最佳答案

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

#define PORT 8888   //The port to send outgoing data to

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

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

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

关于c++ - 为什么UDP服务器上的UDP客户端端口会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com