我正在尝试将Java TCP客户端和node.js TCP服务器一起进行通信。 这是我目前的代码:
Java客户端
import java.net。; import 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('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%C%和C%和C
它给了回来:
Hello World !
***@qq32we3w87d 38s1d87s4df7s4d1+s2d7f+sfdsf4sà$àà3663%ç%&ç%&ç***
tldr:有时在记录缓冲区时,节点会在开头添加字符(带有数字或?的矩形),或者事件会在开始时删除一些字符。
- 如何记录缓冲区并以正确的方式将它们分配给变量?
答案 0 :(得分: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类。正如我所理解的那样,它们非常丰富,而且应该满足您的需求。