2012-07-11 143 views
0

我正在嘗試使Java TCP客戶端和node.js TCP服務器一起通話。 這是我的代碼的時刻:節點緩衝區打印問題

  • Java客戶端

    進口java.net。 ; import java.io.;

    公共類客戶機2 {

    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.createServer();

    服務器進行。( '連接',函數(客戶端){

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

    });

    server.listen(8500);

這個例子會給這個結果回到:

Hello World ! 
**abcdefgh*** 
  • ,但與此輸入:

    abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

它給這個回:

Hello World ! 
***�abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz*** 
  • 與該輸入:

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

它給此回:

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

tldr:有時在記錄緩衝區時,節點會在開始時添加字符(帶有數字或?的矩形)或事件在開始時剪切某些字符。

- 如何記錄緩衝區並將它們分配給變量是正確的?

+0

他的格式化到底發生了什麼?我去試圖編輯他的問題來修復它,但它看起來是正確的。 – 2012-07-11 01:25:23

+0

是的,我很抱歉,但我無法讓代碼熒光筆在整個代碼示例中正常工作。 – 2012-07-11 01:29:13

回答

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類。根據我的理解,它們相當豐富,而且應該滿足您的需求。

+0

在你連接的Java代碼中有ServerSocket,而我的Java代碼是用於客戶端嗎? – 2012-07-11 01:47:32

+0

你是對的。我會修復它(編輯)。 - 在我的舊應用程序中找到客戶端代碼。 – 2012-07-11 01:55:32

+0

我不完全知道是什麼導致了錯誤,但至少你的代碼解決了它!非常感謝 ! – 2012-07-11 02:09:40