C++ 从多个C++;插座
我正在为一个石头剪刀协议实现一个服务器。到目前为止,一切都很顺利,除了我有一个困难,我正在努力克服。作为该计划的总体概述:C++ 从多个C++;插座,c++,sockets,tcp,C++,Sockets,Tcp,我正在为一个石头剪刀协议实现一个服务器。到目前为止,一切都很顺利,除了我有一个困难,我正在努力克服。作为该计划的总体概述: 客户端连接到服务器 第二个客户端连接到服务器 服务器从客户端1接收输入 服务器从客户端2接收输入 服务器确定胜利者,然后将胜利者信息发送回每个客户端 我已经将套接字封装在一个类中,以允许使用更简单的API来处理它们。我遇到的问题是: char playerOneRequest; char playerTwoRequest; int playerOneLength
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);
char请求;
charplayertworequest;
int playeronLength=mPlayerOne->接收和播放请求,
缓冲区大小);
cerr缓冲区大小是多少?您在PlayerRequest中只有一个字符的空间,但似乎您可以从receive读取多个字符。读取的任何附加字符都将放入相邻变量。它是256,但我刚刚将它改为1。现在可以确保存在正确的变量了。但是,当我的循环再次出现时,\r
位于每个循环的缓冲区中,因此它只是将这些循环放在我的输入变量中。因此,您需要使用更大的缓冲区,以便在第一次读取时获得\r。一次读一个字符是很奇怪的。注意:这是一个典型的编程错误。您应该使用“sizeof”而不是manifest常量,那么问题就不会出现了。那么客户机在发送信函后发送了回车?您可以修改客户端以不发送回车,也可以修改服务器以忽略回车。