Не удается отправить данные с Java Socket Server на клиент NodeJS - PullRequest
0 голосов
/ 26 апреля 2019

Я устанавливаю прямое соединение между Socket Server (Java) и Socket Client (NodeJS).Это для веб-интерфейса.

Я могу отправлять данные из NodeJS в Java, но не наоборот.Я прокомментировал в коде, какие позиции я имею в виду.Я пробовал это уже, как вы видите с out.write ("Hello World \ n"); (с flush, конечно).Я пробовал также с out.println ("Hello 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 () ... Это всего лишь диспетчер задач.Заранее спасибо: D

1 Ответ

0 голосов
/ 26 апреля 2019

Вы не получаете сообщение от java, потому что вы установили интервал, который всегда будет отправлять сообщения на сервер, и сервер застрянет в цикле while.

Я бы предложил остановить интервалв какой-то момент, так что будет вызван sendMessage ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...