2017-03-16 143 views
0

我试图使用ACE实现一个基本的客户端服务器程序,但问题是如果我从客户端发送并从服务器接收它,它工作正常。但是,当我增加复杂性时,即多次发送和恢复程序无法正常工作。任何帮助表示赞赏。ACE C++ send_n和recv_n不按预期工作

这里是客户端代码。

#include "ace/SOCK_Acceptor.h" 
#include "ace/SOCK_Connector.h" 
#include "ace/SOCK_Stream.h" 
#include "iostream" 
using namespace std; 
int main(){ 
    ACE_INET_Addr server(7128); 
    ACE_SOCK_Connector cli; 
    ACE_SOCK_Stream cstream; 
    if(cli.connect(cstream, server)==-1){perror("Error");} 
    char buff[100]; 
    if(-1==cstream.recv_n(buff, 7)){printf("Error");} 
    cout<<buff<<endl; 
    cstream.send_n("FU", 3); 
    } 

这里的服务器代码

#include "ace/SOCK_Acceptor.h" 
#include "ace/SOCK_Connector.h" 
#include "ace/SOCK_Stream.h" 
#include "iostream" 
using namespace std; 
int main(){ 
    ACE_INET_Addr server(7128); 
    ACE_INET_Addr client; 
    ACE_SOCK_Acceptor cli(server); 
    ACE_SOCK_Stream cstream; 
    if(cli.accept(cstream, &client)==-1){perror("Error");} 
    char buff[100]; 
    if(-1==cstream.send_n("RAND", 5)){printf("Error");} 
    cstream.recv_n(buff, 3); 
    } 

回答

0

你的服务器发送5个字节,但您的客户端需要读取7.客户被阻塞等了2个,这将永远不会到来更多的字节。

+0

如何通过套接字发送整数值?不像一个字符数组。我想发送它而不知道预定义的长度。 – KingC

+0

通过套接字发送一个整数长度值会打开另一罐蠕虫。现在,试着将服务器的send_n参数改为(“RANDY!”,7)。有关长度等问题,请参阅我的/ Doug Schmidt的书“C++网络编程第1卷”第4章。 –