Java 节点缓冲区打印问题

Java 节点缓冲区打印问题,java,node.js,encoding,types,buffer,Java,Node.js,Encoding,Types,Buffer,我试图让Java TCP客户端和node.js TCP服务器一起通信。 这是我目前的代码: Java客户端 导入java.net。; 导入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.getOutp

我试图让Java TCP客户端和node.js TCP服务器一起通信。 这是我目前的代码:

  • Java客户端

    导入java.net。; 导入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=要求('net'), server=net.createServer()

    server.on('connection',函数(客户端){

    }))

    服务器监听(8500)

此示例将返回此结果:

Hello World !
**abcdefgh***
  • 但以此作为输入:

    ABCDEFGHIjKLMNOPQRSTUVWXYZABCDEFGHIjKLMNOPQRSTUVXYZABCDEFGHIjKLMNOPQRSTUVXYZABCDEFGHIjKLMNOPQRSTUVXYZABCDEFGHIjKLMNOPQRSTUVWXYZ

它还给了我们:

Hello World !
***�abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz***
Hello World !
***@qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sà$àà3663%ç%&ç%&ç***
  • 通过此输入:

    qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sáa$aáa 3663%ç%ç

它还给了我们:

Hello World !
***�abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz***
Hello World !
***@qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sà$àà3663%ç%&ç%&ç***
tldr:有时在记录缓冲区时,节点会在开始处添加字符(带数字的矩形或?),或者在开始处剪切一些字符。


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

我不是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();
sockets=newsocket(,);
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(s.getOutputStream());
BufferedReader br=新的BufferedReader(新的InputStreamReader(s.getInputStream());
//漏掉了一大堆行。这是你应该读台词的地方
//输入(带有一个内部循环)并将内容发送回
s、 关机输入();
bw.flush();
s、 关机输出();

注意,如果您要处理大页面,这可能会导致问题,因为在您准备好之前,BUFFEREDREADER和BUFFEREDWRITER会填满。如果这是一个问题,我会研究其他Reader和Writer类。据我所知,它们非常丰富,应该适合你的需要。

他的格式到底怎么了?我去尝试编辑他的问题来修正它,但它看起来是正确的。是的,我很抱歉,但我无法让代码高亮器在整个代码示例上正常工作。你链接的Java代码中有ServerSocket,而我的Java代码是为客户机编写的,这有关系吗?你是对的。我会把它修好(编辑)-在我的旧应用程序中找到了客户端代码。我不知道是什么导致了错误,但至少你的代码解决了它!非常感谢你!