【问题标题】:Java socket client can't receive data from Node ServerJava 套接字客户端无法从节点服务器接收数据
【发布时间】:2016-07-19 08:13:17
【问题描述】:

我是 nodejs 的新手,我想通过 nodejs 创建一个套接字服务器。

我写了一些简单的代码:

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;
    }
}

我认为这两个代码都是最简单的,但是当客户端向服务器发布数据时,客户端只收到一条消息you say: xxx,间隔写入可能会写入“缓冲​​区”,因为当客户端再次发布数据时,客户端接收Hell from serverHell from serverHell from serverHell from serverHell from serveryou say:xxx 之类的数据。为什么会这样?

当我尝试在节点服务器上捕获用户扫描器时,结果相同:

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);
        }
    }

客户端也无法接收数据。

我该如何解决?

【问题讨论】:

    标签: java node.js sockets


    【解决方案1】:

    你在读行,但不是在写行。您需要为每条发送的消息添加一个行终止符。

    【讨论】:

    • 你能给我一些建议吗?
    • 写入完成后添加 os.EOL () 或附加 "\r\n"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多