首页 > 解决方案 > 通过套接字发送和接收数据:Node.JS 服务器、Java 客户端

问题描述

我正在尝试将数据从 Node JS 网络服务器发送到 java 应用程序。这是我的 JS 代码:

    var server = net.createServer(function (c) { //'connection' listener
    console.log('server connected');
    c.on('end', function () {
        console.log('server disconnected');
    });
    c.on('data', (d) => {
        console.log(data);
    });
    c.pipe(c);
    setInterval(() => {
        let obj = { "foo": "bar" };
        c.write(JSON.stringify(obj));
    }, 3000)
});
server.listen(58430, function () { //'listening' listener
    console.log('server bound');
}); 

所以我现在只是在调试,并尝试每隔一段时间发送数据(foo:bar)。

这是我的java端,循环运行:

        InputStreamReader inFromClient = new InputStreamReader(client.getInputStream());
        while (running.get()) {
            String data = Tools.ReadUntilNull(inFromClient);
            Log.debug("Received: " + data);
        }

其中“客户端”是侦听正确端口的套接字。'running' 是一个真实的原子布尔值。

Tools.ReadUntilNull 对应于此:

public static String ReadUntilNull(InputStreamReader reader) throws IOException {
    StringBuilder sb = new StringBuilder();
    char[] results = new char[1];
    int bytes_read = reader.read(results);
    while (results[0] != 0x00 && bytes_read == 1) {
        sb.append(results[0]);
        bytes_read = reader.read(results);
    }

    return sb.toString();
}

我的 Node.JS 应用程序记录服务器已绑定和连接。只有当我发送数据时,我似乎无法在我的 Java 客户端中接收到它。

我只是在学习java,所以请放轻松^^

标签: javascriptjavanode.jssockets

解决方案


我认为你只是做错了。正如您所提到的,您正在尝试在 java 端阅读。然后你应该创建 nodejs 客户端。验证相同。

更多: https ://nodejs.org/api/net.html#net_net_createconnection

const net = require('net');
const client = net.createConnection({ port: 8124 }, () => {
  // 'connect' listener.
  console.log('connected to server!');
  client.write('world!\r\n');
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('disconnected from server');
});

推荐阅读