2016-09-11 10 views
1

;C++サーバーとJavaクライアントのチャット

私は、C++サーバーとJavaクライアントを使用してチャットプログラムを作成します。

クライアントからメッセージを受信したことに責任があることを、関数のコード:

void *recieve(void* *v) 
{ 
    while (true) 
    { 
     bzero(buffer, 256); 
     n = read(socketfd, buffer, 256); 
     if (n < 0) 
      exit(1); 
     printf("Client: %s", buffer); 
    } 
} 

サーバーにメッセージを送信する責任ファンクションタールのコードだけである:

ps.println(msg); 

psは印刷ストリームです。

サーバーにメッセージを送信すると、「hello world」と言うと、C++サーバーは「クライアント:hello worldClient」というメッセージを表示します。

誰かが私にこれを手伝っていただければ幸いです。 (私の英語が良くない場合はお詫び申し上げます) ありがとう!

+0

読み込みバイト数だけの書き込みと書き込みを試みましたか?そして、Joachimが言ったように、ヌル終了バイトxを忘れないでください。 – Naliwe

+0

ところで、あなたは 'read'呼び出しのエラーチェックで重要なケースを逃しています:あなたは正しく切断しません。 –

+0

@JoachimPileborgは、[bzero() '](http://man7.org/linux/man-pages/man3/bzero.3.html)では、256バイト未満の場合にヌルターミネータが存在することを確認していません受け取った? – Christophe

答えて

2

read()関数は、ファイルの最後に到達すると0を返します。 を受け取る最初のループ反復があり、それ以上の反復はありません。read()は0を返します。したがって、 "Client:"は空の文字列で表示されます。

  • ソケットベースの通信と、サーバ側に1つread()は、クライアント側に1つprintln()に対応することが保証されない:

    また、ことに注意してください。したがって、メッセージが長くなると、それを断片的に受け取る危険があります。出力では、メッセージテキスト内に複数の「クライアント」が表示されます。

  • 送信された行区切り文字on the java sideは、サーバー側で予想されるline separatorに必ずしも対応していない可能性があります。クロスプラットフォームで作業している場合は期待してください。
関連する問題