1

私はおそらくここと同じような問題を抱えています。

サーバー(Java TCPサーバー)からこれを実行しています:

public void sendMsg(String msg) {

    out.println(msg); // msg is: "MSG Hello" without quetes

    out.flush();

}

2回以上押すと、unity3dコードc#ソケットであるクライアントコードの最初のメッセージのみを受信します

void Update() {

    if(connected) {

        try {

            if(theStream.DataAvailable) {

                String data = sr.ReadLine();
// bla bla
4

1 に答える 1

1

を取り除きif(theStream.DataAvailable)ます。すでにデータを受け取っている場合は利用できないため、その方法でデータが利用可能かどうかを確認することはできません。このReadLine関数は1行しか返しませんが、複数行を読み取る場合があります。

だからここに何が起こるかです:

  1. すべてのデータが送信されます。

  2. データが利用可能です、あなたは電話しますReadLine。すべてのデータを読み取り、1行を返します。

  3. すでに接続から読み取られているため、現在データは利用できません。

そのチェックには他にも問題があります。回線が利用できない場合に電話をかけないようにしようとしているReadLine場合、それは行われません。一部のデータが利用可能であるからといって、行全体が利用可能であるとは限りません。X(もう一方の端が悪意を持って1バイトだけを送信する場合を想像してみてください。)

于 2012-12-26T22:59:10.573 に答える