2017-03-16 5 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つのバイトを送信しているサーバーのコードですが、あなたのクライアントは、クライアントが来ることはありません2バイト以上を待ってブロックされている7を読み取ることが期待されます。

+0

ソケット上で整数値を送信するにはどうすればよいですか?文字配列に似ていません。あらかじめ定義された長さを知らずに送付したい。 – KingC

+0

ソケット上に整数の長さの値を送信すると、別のワームを開くことができます。今のところ、サーバーのsend_n引数を( "RANDY!"、7)に変更してみてください。長さなどのより大きな問題については、my/Doug Schmidtの "C++ Network Programming、Volume 1"の第4章を参照してください。 –

関連する問題