【发布时间】:2014-01-14 08:39:32
【问题描述】:
我有一个客户端和一个服务器应用程序。当客户端想要发送文件时,我使用的是 TCP 连接。当我使用恒定端口号进行连接时(服务器接收文件)。
我想使用随机端口,所以我尝试将端口设置为 0。
我的代码是:
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0;
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
cout << "failed to bind with errno: "<< errno << endl;
exit(1);
}
绑定有效,但使用端口 0 而不是预期的随机端口。
我做错了什么?
【问题讨论】:
-
Afaik,您不需要在客户端调用 bind。然后它将随机选择端口
-
如果服务器随机选择一个端口号,您如何期望客户端知道使用哪个端口号?
-
队长的问题很好。一种情况是 ISO 15118 标准(电动汽车与充电站的通信),当服务器(充电站)通告 TCP 连接参数时,客户端可以通过在 UDP 数据包中广播“SDP”(服务发现协议)请求来获取子网,然后服务器以 UDP 数据包的形式将参数(IP/端口)回复给客户端。
标签: c++ linux sockets tcp port