同样的,我们将UDP版的doEcho()也设计成返回bool:true表示循环继续;false表示关闭客户端。

C++代码
  1. class UDPEchoClient: public UDPClientSock{  
  2. public:  
  3.     explicit UDPEchoClient(  
  4.                 int pre_buffer_size = 32);  
  5.     ~UDPEchoClient();  
  6.     bool doEcho(const std::string& echo_message);  
  7. };  

       我们依然使用C++字符串。

C++代码
  1. UDPEchoClient::UDPEchoClient(  
  2.                 int pre_buffer_size):  
  3. UDPClientSock(pre_buffer_size)  
  4. {}  
  5.   
  6. UDPEchoClient::~UDPEchoClient()  
  7. {}  
  8.   
  9. bool UDPEchoClient::doEcho(const std::string& echo_message)  
  10. {  
  11.     if ( UDPSendtoDest(echo_message.data(), echo_message.size()) < 0) {  
  12.         return false;  
  13.     }  
  14.     if (echo_message == "/shutdown") {  
  15.         return false;  
  16.     }  
  17.     if (UDPReceive() < 0) {  
  18.         return false;  
  19.     }  
  20.     std::cout.write(preBuffer, preReceivedLength);  
  21.     std::cout << std::endl;  
  22.     return true;  
  23. }  

       当echo_message为“空”的时候,即输入直接回车,是一个"",用C风格来说,即时'\0',从C++来说,是const char[1],其C++风格的长度echo_message.size()为0,这时候就会发送一个“0长度”的UDP数据包。

       另外,我们小心设计了关闭服务器的请求,发送/shutdown后,客户端会自动返回false,表示会关闭,不再等待来自服务器的recvfrom()。否则,服务器已经关闭,recvfrom()则会一直阻塞。

C++代码
  1. int main(int argc, char* argv[])  
  2. {  
  3.     unsigned short server_port = 5000;  
  4.     if (argc == 3 && atoi(argv[2]) > 0) {  
  5.         server_port = atoi(argv[2]);  
  6.     }  
  7.   
  8.     WinsockAPI winsockInfo;  
  9.     winsockInfo.showVersion();  
  10.   
  11.     UDPEchoClient echo_client;  
  12.     echo_client.UDPSetDest(argv[1], server_port);  
  13.   
  14.     std::string msg;  
  15.     bool go_on = true;  
  16.     while (msg != "/exit" && go_on){  
  17.         std::cout << "Echo: ";  
  18.         std::getline(std::cin, msg);  
  19.         go_on = echo_client.doEcho(msg);  
  20.     }  
  21.   
  22.     return 0;  
  23. }  

       主程序中,如果使用/exit,会先发送给服务器,然后再关闭。

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.teaching4real.com/software/473.html
2015年11月30日
作者:鸡啄米 分类:软件开发 浏览: 注册送白菜网:0