Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从多个C++;插座_C++_Sockets_Tcp - Fatal编程技术网

C++ 从多个C++;插座

C++ 从多个C++;插座,c++,sockets,tcp,C++,Sockets,Tcp,我正在为一个石头剪刀协议实现一个服务器。到目前为止,一切都很顺利,除了我有一个困难,我正在努力克服。作为该计划的总体概述: 客户端连接到服务器 第二个客户端连接到服务器 服务器从客户端1接收输入 服务器从客户端2接收输入 服务器确定胜利者,然后将胜利者信息发送回每个客户端 我已经将套接字封装在一个类中,以允许使用更简单的API来处理它们。我遇到的问题是: char playerOneRequest; char playerTwoRequest; int playerOneLength

我正在为一个石头剪刀协议实现一个服务器。到目前为止,一切都很顺利,除了我有一个困难,我正在努力克服。作为该计划的总体概述:

  • 客户端连接到服务器
  • 第二个客户端连接到服务器
  • 服务器从客户端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);
    
    char请求;
    charplayertworequest;
    int playeronLength=mPlayerOne->接收和播放请求,
    缓冲区大小);
    
    cerr缓冲区大小是多少?您在PlayerRequest中只有一个字符的空间,但似乎您可以从receive读取多个字符。读取的任何附加字符都将放入相邻变量。

    它是256,但我刚刚将它改为1。现在可以确保存在正确的变量了。但是,当我的循环再次出现时,
    \r
    位于每个循环的缓冲区中,因此它只是将这些循环放在我的输入变量中。因此,您需要使用更大的缓冲区,以便在第一次读取时获得\r。一次读一个字符是很奇怪的。注意:这是一个典型的编程错误。您应该使用“sizeof”而不是manifest常量,那么问题就不会出现了。那么客户机在发送信函后发送了回车?您可以修改客户端以不发送回车,也可以修改服务器以忽略回车。