0

クライアントサーバーチャットプログラムを作成しましたが、何らかの理由でサーバーに何かを送信したり、その逆を行ったりすると、追加の空の行が表示されます

たとえば、クライアントが「こんにちは」と言った場合、サーバーは受信します.... {クライアント:こんにちはクライアント:}これらは送信および受信機能です

public static void send(){
    out.println(message_out);

    }



public void read(){      


    try {
        while(true)
        {

        message_in = in.readLine();

            ConversationBox.append("Client :"+message_in+"\n");

        }
    } catch (IOException e) {

   System.out.println("Client disconnected!");
   e.printStackTrace();

    }



}



}
4

3 に答える 3

0

2番目の読み取り値はnull値のようです。これにより、例外が発生し、whileループが終了します。代わりに、次のwhileループを使用する必要があります。

while ((message_in = in.readLine()) != null)
    ConversationBox.append("Client :"+message_in+"\n");
于 2012-08-26T21:39:37.850 に答える
0

プロトコルには、メッセージの終わりを一意に識別する方法がありません。メッセージが「foo\nbar」の場合は、「foo \ nbar\n」として送信します。受信者は改行をメッセージセパレータとして解釈するため、受信者には「foo」と「bar」の2つのメッセージのように見えます。

メッセージ区切り文字として改行を使用する場合は、次の2つのいずれかを実行する必要があります。

  1. メッセージに改行が含まれていないことを確認してください。

  2. メッセージに改行が含まれている場合は、なんとかしてそれをエスケープし、受信者でそれを検出します。

それ以外の場合、メッセージ「Hello\n」は「Hello\n \ n」として送信され、「Hello」として受信され、その後に空のメッセージが続きます。

于 2012-08-26T21:47:56.847 に答える
0

よくthxデビッドシュワルツ、私は使用しました

if(message_in.isEmpty()){}
else
 ConversationBox.append("Server :"+message_in+"\n");

そしてそれはうまく働いています

于 2012-08-27T14:10:11.857 に答える