2017-03-16 1 views
0

Ich versuche, ein grundlegendes Client-Server-Programm mit ACE zu implementieren, aber das Problem ist, dass, wenn ich vom Client senden und es vom Server erhalte, es richtig funktioniert. Aber, wenn ich die Komplexität, d. H. Mehrere senden und recvs erhöhen, funktioniert das Programm nicht. Jede Hilfe wird geschätzt.ACE C++ send_n und recv_n funktioniert nicht wie erwartet

Hier ist der Client-Code.

#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); 
    } 

Hier ist der Servercode

#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); 
    } 

Antwort

0

Ihr Server 5 Bytes sendet aber Ihr Client erwartet 7. Der Auftraggeber zu lesen ist für 2 weitere Bytes blocked warten, die nie kommen wird.

+0

Wie kann ich einen Integer-Wert über Socket senden? Nicht wie ein Zeichen-Array. Ich möchte es senden, ohne die vordefinierte Länge zu kennen. – KingC

+0

Durch das Senden eines ganzzahligen Längenwerts über den Socket wird eine weitere Würmer-Dose geöffnet. Versuchen Sie zunächst einmal, die Argumente send_n Ihres Servers zu ändern ("RANDY!", 7). Für das größere Problem von Längen und dergleichen, siehe mein/Doug Schmidts Buch "C++ Network Programming, Band 1" Kapitel 4. –

Verwandte Themen