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, ...)并且没有收到任何消息。

这段代码有什么不正确的?如何从服务器上的一个客户端连接/接受两个套接字,或者有没有最好的方法?

谢谢

4

1 回答 1

0

我今天挖了几个小时并返回问题中的代码。两个插座现在工作正常。客户端上的 RxSocket 接收来自服务器的所有消息,而 TxSocket 将消息发送到服务器。看起来这是代码中的错字。

PS listen() 函数只能调用一次,但调用两次不会影响任何事情。

于 2012-10-16T20:45:42.003 回答