2017-10-04 143 views
0

我在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未使用且可用。

回答

1

我發現問題與我的代碼。該服務器套接字綁定到的端口號3000我改變

sock_var.sin_port=3000; 

sock_var.sin_port=htons(3000); 

所以,這個問題已經得到的東西做的網絡字節順序之後。

+1

這與'sockaddr_in.sin_port'被指定爲網絡字節順序中的端口','man'頁面中的*有關* – EJP

+0

@EJP - 感謝您的澄清。 – Learner

相關問題