gpt4 book ai didi

C:将开放端口绑定(bind)到套接字的问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:45 25 4
gpt4 key购买 nike

我正在处理一项作业,该作业涉及将可用端口绑定(bind)到 TCP 套接字。最初,当我编写我的服务器代码时,我为系统设置了一个预定义的端口来监听,这非常有效。但是,在将我的代码转换为绑定(bind)到开放端口并打印正在使用的端口后,我无法通过 telnet 连接到服务器。

当我将代码转换回使用预定义端口时,我遇到了另一个有趣的异常现象。再次,服务器在预定义端口上按预期工作,但是,它报告使用的端口与我分配给它的端口不同。

第一个代码片段创建一个套接字并使用预定义的端口 (32000)。

/*Create TCP socket with a predefined port*/
listener = socket(AF_INET, SOCK_STREAM, 0);
if(listener == -1) {
perror("Create socket");
exit(1);
}/*End if*/

bzero(&servaddr, sizeof(servaddr));/*Set serraddr to 0's*/
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);/*Any of this host's interfaces is OK.*/
servaddr.sin_port = htons(32000);
bind(listener, (struct sockaddr *)&servaddr, sizeof(servaddr));
length = sizeof(servaddr);
/*getsockname(listener, (struct sockaddr *)&servaddr, &length);/*Find out port number*/
printf("RSTREAM:: assigned port number %d\n", servaddr.sin_port);

第二个代码片段使用可用端口。我尝试将 servaddr.sin_port 设置为 0,因为我读到这样做表示系统将提供可用端口。我也试过评论这一行只是为了它,但结果是一样的。

/*Create TCP socket with an open port*/
listener = socket(AF_INET, SOCK_STREAM, 0);
if(listener == -1) {
perror("Create socket");
exit(1);
}/*End if*/

bzero(&servaddr, sizeof(servaddr));/*Set serraddr to 0's*/
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);/*Any of this host's interfaces is OK.*/
servaddr.sin_port = htons(0);/*bind() will provide unique port.*/
bind(listener, (struct sockaddr *)&servaddr, sizeof(servaddr));
length = sizeof(servaddr);
getsockname(listener, (struct sockaddr *)&servaddr, &length);/*Find out port number*/
printf("RSTREAM:: assigned port number %d\n", servaddr.sin_port);

最佳答案

你需要打印转换后的端口号,即你需要做ntohs(3) :

printf("RSTREAM:: assigned port number %d\n", ntohs(servaddr.sin_port));

关于C:将开放端口绑定(bind)到套接字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871128/

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