我正在努力为Rock Paper Scissors协议实现服务器。到目前为止,一切进展顺利,除了我要克服的障碍。作为该程序的总体概述:
客户端连接到服务器。
第二个客户端连接到服务器。
服务器从客户端1接收输入。
服务器从客户端2接收输入。
服务器确定获胜者,然后将获胜信息发送回每个客户。
我将套接字包装在一个类中,以允许使用更简单的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中找到
最佳答案
BUFFER_SIZE是什么值?您在playerOneRequest中只能容纳一个字符,但是看来您可能从接收中读取多个字符。读取的所有其他字符将放入相邻变量中。