繁体   English   中英

无法将数据从Java Socket Server发送到NodeJS客户端

[英]Can't send data from Java Socket Server to NodeJS client

我正在套接字服务器(Java)和套接字客户端(NodeJS)之间建立实时连接。 这是针对Web界面的。

我可以将数据从NodeJS发送到Java,但不能反过来。 我在代码中评论了我的意思。 我已经用out.write(“ Hello World \\ n”);像您看到的那样尝试过 (当然有冲水)。 我也尝试过out.println(“ H​​ello World”); (当然有冲水)。

public class WebHandler {

    private ServerSocket server;
    private static Socket sock;

    public void listen(int port) {
        try {
            server = new ServerSocket(port);
        } catch (IOException e) {
            System.out.println("Could not listen on port " + port);
            System.exit(-1);
        }

        Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(), new BukkitRunnable() {
            @Override
            public void run() {
                try {
                    System.out.println("Waiting for connection");
                    final Socket socket = server.accept();
                    sock = socket;
                    final InputStream inputStream = socket.getInputStream();
                    final InputStreamReader streamReader = new InputStreamReader(inputStream);
                    BufferedReader br = new BufferedReader(streamReader);

                    // readLine blocks until line arrives or socket closes, upon which it returns null
                    String line = null;
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                    }

                    WebHandler.sendMessage();

                } catch (IOException e) {
                    System.out.println("Accept failed: " + port);
                    System.exit(-1);
                }
            }
        }, 0, 100);

    }

    // CRITICAL

    public static void sendMessage() {
        try {
            PrintWriter out = new PrintWriter(sock.getOutputStream());
            out.write("Hello World from Java!" + "\n");
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

var net = require('net');

var client = net.connect(9090, 'localhost');
client.setEncoding('utf8');
setInterval(function() {
  console.log("Writing....")
  var ret = client.write('Hello from node.js\n');
  console.log("Wrote", ret)
}, 5000);

// CRITICAL

client.on('data', function(data) {
  console.log('Received: ' + data);
});

请不要因为Bukkit.getScheduler()而分心,它只是一个任务管理器。 提前致谢

您没有收到来自Java的消息,因为您设置了一个间隔,该间隔将始终向服务器发送消息,并且服务器将陷入while循环中。

我建议在某个时间点停止间隔,以便调用sendMessage()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM