関連するコードは以下のとおりです。私はポート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);