0

Java TCP クライアントと node.js TCP サーバーを連携させようとしています。これは現時点での私のコードです:

  • Java クライアント

    java.net をインポートします。; java.io をインポートします。;

    パブリッククラスClient2{

    public static void main(String[] args)  throws Exception{
        Socket s = new Socket("192.168.1.35",8500);
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
        dos.writeUTF("abcdefgh");
        dos.close();
        s.close();
    }
    

    }

  • Node.js サーバー

    var net = require('net'), server = net.createServer();

    server.on('接続', 関数 (クライアント) {

    console.log('Hello World !');
    
    client.on('data', function(data) {
    
        var message = data.toString('utf8');
        console.log('***' + message +'***');
    
    });
    

    });

    サーバー。リッスン (8500);

この例では、次の結果が返されます。

Hello World !
**abcdefgh***
  • しかし、これを入力として:

    abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

それはこれを返します:

Hello World !
***�abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz***
  • この入力で:

    qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sà$àà3663%ç%&ç%&ç

それはこれを返します:

Hello World !
***@qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sà$àà3663%ç%&ç%&ç***

tldr: バッファをログに記録するときに、ノードが先頭に文字 (数字または ? を含む四角形) を追加するか、イベントが先頭でいくつかの文字をカットすることがあります。

- バッファをログに記録し、正しい方法で変数に割り当てるにはどうすればよいですか?

4

1 に答える 1

1

私は DataOutputStream の専門家ではありませんが、実際に余分な文字を追加している場合は、別のものを使用する必要があります。

サーバー関連の作業を行うときは、BufferedReader と BufferedWriter を使用しました。次のようになります。

        Socket s = new Socket(<<WEB ADDRESS AS STRING>>,<<PORT NO AS INT>>);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        //left out a bunch of lines. This is where you should read the lines 
        //of input (with an inner loop) and send stuff back
        s.shutdownInput();
        bw.flush();
        s.shutdownOutput();

大きなページを処理する場合は、準備が整う前に BufferedReader と BufferedWriter がいっぱいになるため、問題が発生する可能性があることに注意してください。これが問題である場合は、他の Reader クラスと Writer クラスを調べます。私が理解しているように、それらは非常に豊富であり、あなたのニーズに合うはずです.

于 2012-07-11T01:38:52.140 に答える