【问题标题】:Node buffer printing issues节点缓冲区打印问题
【发布时间】:2012-07-10 13:48:54
【问题描述】:

我正在尝试让 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'), 服务器 = net.createServer();

    server.on('connection', function (client) {

    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%ç%&ç%&ç

它会回馈这个:

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

tldr:有时在记录缓冲区时,节点会在开头添加字符(带有数字或?的矩形),或者事件会在开头剪切一些字符。

- 如何以正确的方式记录缓冲区并将它们分配给变量?

【问题讨论】:

  • 他的格式到底怎么了?我去尝试编辑他的问题来解决它,但它似乎是正确的。
  • 是的,我很抱歉,但我无法让代码荧光笔在整个代码示例上正常工作。

标签: java node.js encoding types buffer


【解决方案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 会在您准备好之前填满。如果这是一个问题,我会d 查看其他 Reader 和 Writer 类。据我了解,它们非常丰富,应该可以满足您的需求。

【讨论】:

  • 在您链接的 Java 代码中是否有 ServerSocket 而我的 Java 代码是针对客户端的,这有关系吗?
  • 你是对的。我会修复它(已编辑)。 - 在我的旧应用程序中找到客户端代码。
  • 我不完全知道是什么导致了这个错误,但至少你的代码解决了它!非常感谢!
猜你喜欢
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多