我正在linux下的gcc中实现一个多线程echo服务器。我将服务器套接字绑定到端口号3000
。下面是我用于绑定的代码。
EchoServer.c
struct sockaddr_in sock_var;
int serverFileDiscriptor=socket(AF_INET,SOCK_STREAM,0);
sock_var.sin_addr.s_addr=inet_addr("0.0.0.0");
sock_var.sin_port=3000;
sock_var.sin_family=AF_INET;
bind(serverFileDiscriptor,(struct sockaddr*)&sock_var,sizeof(sock_var));
但是我看到服务器绑定到端口号47115
,如下所示。
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:47115 0.0.0.0:* LISTEN 0 79942 22843/./EchoServer
根据我的理解,仅将端口号指定为0
会将套接字绑定到随机未使用的端口。可能的原因是什么?服务器以root用户身份启动,我确认的端口号3000
未使用且可用。
答案 0 :(得分:1)
我发现我的代码存在问题。更改
后,服务器套接字绑定到端口号3000
sock_var.sin_port=3000;
到
sock_var.sin_port=htons(3000);
所以,这个问题与网络字节顺序有关。