多个C ++套接字的多次读取

时间:2014-03-09 00:03:45

标签: c++ sockets tcp

我正在努力为Rock Paper Scissors协议实现服务器。到目前为止事情进展顺利,除了我有一个障碍,我试图过去。作为该计划的总体概述:

  1. 客户端连接到服务器。
  2. 第二个客户端连接到服务器。
  3. 服务器接收来自客户端1的输入。
  4. 服务器接收来自客户端2的输入。
  5. 服务器确定获胜者然后将获胜信息发送回每个客户。
  6. 我已经将套接字包装在一个类中,以便使用更简单的API来处理它们。我遇到麻烦的部分在这里:

      char playerOneRequest;
      char playerTwoRequest;
      int playerOneLength = mPlayerOne->receive(&playerOneRequest,
                                                BUFFER_SIZE);
      cerr << "After player one\n";
      cout << "Received '" << playerOneRequest << "' from player one.\n";
      int playerTwoLength = mPlayerTwo->receive(&playerTwoRequest,
                                                BUFFER_SIZE);
      cerr << "After player two\n";
      cerr << "Received '" << playerTwoRequest << "' from player two.\n";
    
      char playerOne = toupper(playerOneRequest);
      char playerTwo = toupper(playerTwoRequest);
    

    我一直在使用DDD来调试它,我发现了一个问题。让我们假设一个玩家发送了R,玩家两个发送了S。在第二次接收之后第一次接收playerOneRequest为R时,对于玩家二(单独的TCP流),playerTwoRequest为S。但此时,playerOneRequest现在等于\r

    我无法弄清楚为什么会这样。我的所有代码都在this Gist

    中提供

1 个答案:

答案 0 :(得分:2)

BUFFER_SIZE的值是多少?您只能在playerOneRequest中为一个角色留出空间,但看起来您可能会从接收中读取多个角色。读取的任何其他字符都将放入相邻的变量中。