2016-04-27 9 views
0

関連するコードは以下のとおりです。私はポート12345でソケットをバインドし、コードは期待どおり完全に動作します。それはそのポートとすべてのリクエストに対する応答です。ソケットは1つのポートにバインドされていますが、netstatとlsofのようなツールは他のポートで受信しています。

しかし、netstatやlsofなどのツールでは、ほぼ常にポート14640でリッスンするプロセスが表示されます。私はこれに困惑し、最終的にポート14640でソケットを縛るとどうなるかを見極めることにしました。それが14640にバインドされているとき、lsofは元のポートを聞いていることを示しています、12345.私は前後に行って、同じ結果が両方の方法で起こっているのを見ていました。これらの2つの数字がお互いに奇妙な関係を持っているかのようです。

私は迷っていますか?この動作の説明はありますか?どこでも実際に任意の例に示すように

serverAddress.sin_port = htons(port); //port = 12345 

なければならない

SOCKET sock, clientSock; 
sockaddr_in serverAddress, clientAddress; 
sock = socket(AF_INET, SOCK_STREAM, 0); 
if (sock < 0) { 
    printff("Error opening socket\n"); 
    return; 
} 

char *temp = (char *)&serverAddress; 
for (int i = 0; i < sizeof(serverAddress); i++) { 
    temp[i] = 0; 
} 

serverAddress.sin_family = AF_INET; 
serverAddress.sin_addr.s_addr = INADDR_ANY; 
serverAddress.sin_port = port; //port = 12345 

int b = bind(sock, (sockaddr*)&serverAddress, sizeof(serverAddress)); 
if (b != 0) { 
    printff("Unable to bind: %i\n", lastError()); 
    return; 
} 

int res = listen(sock, SOMAXCONN); 
if (res != 0) { 
    printff("Unable to listen: %i\n", lastError()); 
    return; 
} 

socklen_t clilen = sizeof(*clientAddress); 
clientSock = accept(sock, (sockaddr*)&clientAddress, &clilen); 

答えて

2
serverAddress.sin_port = port; //port = 12345 

この2つの数字がお互いに奇妙な関係にあるかのようです。

があります。 1つは、もう一方のバイトスワップされた値です。 0x3039および0x3930。

関連する問題