1

私はソケットの初心者です。私はクライアント サーバー アプリケーションを作成していますが、次の問題が発生しました。

クレント:

void * msgDispatcher(...){
   ...
   while(isRunning){
      read(rxSocket, buf, ...);
   }
}

int main(...){
   ...
   connect(txSocket, ...);
   connect(rxSocket, ...);

   createThread(..., msgDispatcher, ...);
   while(isRunning){
      fgets(buf, ...);
      write(txSocket, buf, ...);
  }
}

サーバ:

int main(...){
   ...
   listenerSocket = socket(...);
   bind(listenerSocket,...);

   listen(listenerSocket, 10);
   rxSocket = accept(listenerSocket, (sockaddr*) &clientAddr, &addrLength);

   listen(listenerSocket, 10);
   txSocket = accept(listenerSocket, (sockaddr*)  &clientAddr, &addrLength);

   while(isRunning){
      read(rxSocket, ...);
      write(txSocket, ...);
   }
}

クライアントから送信したメッセージはすべてサーバーで受信されますが、サーバーからの応答はすべてクライアントで受信されません。サーバーは write(txSocket, ...);を使用してメッセージを送信します。ここには問題はありません。しかし、クライアントはread(rxSocket, ...)で常に待機しており、メッセージが受信されません。

このコードの何が間違っていますか? サーバー上の1つのクライアントから2つのソケットを接続/受け入れる方法、またはそれを行う最良の方法はありますか?

ありがとう

4

1 に答える 1

0

今日は数時間掘り下げて、質問のようにコードを返しました。2 つのソケットが正常に動作するようになりました。クライアントの RxSocket はサーバーからすべてのメッセージを受信し、TxSocket はサーバーにメッセージを送信します。コードのタイプミスだったようです。

PS listen() 関数は 1 回だけ呼び出すことができますが、2 回呼び出しても何の影響もありません。

于 2012-10-16T20:45:42.003 に答える