这是我的echo服务器代码
Pattern regex = Pattern.compile("^.*?\/\/([^:\/\s]+)(.*(?=\?|\#))", Pattern.DOTALL);
这是测试代码
var net = require('net')
var server = net.createServer(function(socket) {
socket.write('Echo server\r\n');
socket.on('data', function(data) {
console.log('recv data: ' + data);
socket.write(data + ' random data');
});
socket.on('end', socket.end);
});
server.listen(1337, '127.0.0.1');
当我在服务器启动后首次运行客户端时,终端显示:
var net = require('net');
var client = new net.Socket();
client.connect(1337, '127.0.0.1', function() {
console.log('Connected');
client.write('Hello, server! Love, Client.');
});
client.on('data', function(data) {
console.log('Received: ' + data);
client.destroy();
});
client.on('close', function() {
console.log('Connection closed');
});
我可以看到服务器已经将数据发送到wireshark中的客户端,但客户端在此数据包之后立即向服务器发送RST数据包。
第二个是正常的
➜ test node client.js
Connected
Received: Echo server
Connection closed
答案 0 :(得分:1)
输出的差异仅仅是因为竞争条件。有时服务器能够(实际上完全关闭套接字之前接收和发送更多数据,有时则不然。)。