0

簡単なクライアント サーバー プログラムを作成しました。クライアントプログラムでクライアントのポート番号を出力できます。値は動的です。

しかし、サーバープログラムで印刷しようとすると、クライアントではなくサーバーのポート番号が表示されます。

connfd = accept(listenfd, (struct sockaddr*) &cliaddr, &clilen);

cout<<"Server: Server's Port: "<< ntohs(servaddr.sin_port)<<endl; /*23112*/
cout<<"Server: Client's Port: "<< ntohs(cliaddr.sin_port)<<endl; /*23112*/

クライアントプログラムでも同じものを使用していますが、ランダムポートを正しく出力しています。私はこのようにそれらを初期化しました:

struct sockaddr_in cliaddr, servaddr;
socklen_t clilen = sizeof(cliaddr);
4

1 に答える 1

1

「clilen」を初期化する必要があります。

addrlen 引数は、値と結果の引数です。呼び出し元は、addr が指す構造体のサイズ (バイト単位) を含むように初期化する必要があります。返されると、ピア アドレスの実際のサイズが含まれます。

于 2012-11-12T01:36:35.603 に答える