Reputation: 968
i'm new in nodejs, i want create a socket server by nodejs.
and i write some simple code:
nodejs
:
var sockets = [];
net.createServer(function (client) {
sockets.push(client);
client.on('data', function (data) {
console.log(data);
client.write("you say:" + data);
setInterval(function(){
client.write("Hell from server");
}, 100);
});
client.on('end', function () {
sockets.splice(sockets.indexOf(client), 1);
})
}).listen(PORT, HOST);
java
:
Socket client;
BufferedReader buf;
...
boolean flag = true;
while (flag) {
String echo = buf.readLine();
System.out.println(null == echo || "".equals(echo) ? "-null-" : echo);
if (null != echo && echo.contains("bye")) {
flag = false;
}
}
i think both the code are simplest, but when the client post data to server, the client only receive one message you say: xxx
, the interval write maybe write to a "buffer" because when the client post data again, the client receive data like Hell from serverHell from serverHell from serverHell from serverHell from serveryou say:xxx
. why is it so?
the same result when i try to catch user scanner on node server:
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
for (var i in sockets) {
if (sockets[i] && sockets[i].writable) {
sockets[i].write(line);
}
}
the client can't receive the data, too.
how can i fix it ?
Upvotes: 0
Views: 246
Reputation: 311028
You're reading lines but you aren't writing lines. You need to add a line terminator to each sent message.
Upvotes: 1