2017-10-04 14 views
0

私はlinuxの下でgccにマルチスレッドエコーサーバを実装しています。サーバーソケットをポート番号3000にバインドします。以下は私のコードがバインディングに使用されています。サーバソケットが指定されたポートにバインドしない

EchoServer.c私は以下に示すように、サーバがポート番号47115に結合していることがわかりしかし

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)); 

。私の理解あたりとして

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=htons(3000); 

sock_var.sin_port=3000; 

を変更した後に、この問題はネットワークバイトオーダーとは何かを持っています。

+1

これは、 'sockaddr_in.sin_port'が 'man'ページの 'ネットワークバイトオーダーのポート'に*指定されていることと関係しています。* – EJP

+0

@EJP - 明確化のためにありがとう。 – Learner

関連する問題