xuyanjun
xuyanjun

Reputation: 968

Java socket client can't receive data from Node Server

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

Answers (1)

user207421
user207421

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

Related Questions