2012-07-11 142 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