我正在努力为Rock Paper Scissors协议实现服务器。到目前为止事情进展顺利,除了我有一个障碍,我试图过去。作为该计划的总体概述:
我已经将套接字包装在一个类中,以便使用更简单的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
中提供答案 0 :(得分:2)
BUFFER_SIZE的值是多少?您只能在playerOneRequest中为一个角色留出空间,但看起来您可能会从接收中读取多个角色。读取的任何其他字符都将放入相邻的变量中。