Не удается подключиться к подключению socket.io в node.js - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в node.js и, проработав соответствующие части книги Векслера, я пытаюсь создать простой поток, используя socket.io .

Здесь это мой код сервера node.js:

const port = 3000,
  dataIntervalMillis = 5000,
  express = require("express"),
  app = express(),
  crypto = require('crypto');

const server = app
// .get("/", (req, res) => {
//   res.send("Run this project by typing in <b>nodemon</b> in the node.js command prompt.");
// })
.listen(port, () => {
  console.log(`RNG Server running on port number ${port}`);
}),
io = require("socket.io")(server);

io.on("connection", client => {
  console.log("RNG client connected.");
  io.emit("New RNG client connection.");

  client.on("disconnect", () => {
    console.log("RNG client disconnected.");
    io.emit("RNG client disconnected.");
  });
});

Я создал автономное приложение Java для тестирования потока:

//import java.io.BufferedReader;
import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.io.PrintStream;
import java.net.Socket;

public class SimpleSocketClientExample {

    public static void main(String[] args) {

    String server = "localhost";
    int port = 3000;

        try {

            // Connect to the server
        System.out.println("Connect to server " + server + " on port " + port + "...");
            Socket socket = new Socket( server, port );
        System.out.println("...connected.");

        //BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
        InputStream in = socket.getInputStream();

        System.out.println("Reading byte...");
        int b = in.read();
        System.out.println("...byte read.");

            // Close our streams
        if (in != null) {
        in.close();
        }
        if (socket != null) {
        socket.close();
        }
        }
        catch( Exception e ) {
            e.printStackTrace();
        }
    }   
}

Проблема в том, что этот клиентский код висит на in.read() строка.

Единственный журнал консоли с сервера - RNG Server running on port number 3000. В журнале сервера нет RNG client connected, что означает, что клиент не подключился (или подключился к чему-то еще).

Я тестировал свое приложение node.js с помощью онлайн-тестеров сокетов, и они похоже, тоже не подключаются - это указывает на то, что проблема, вероятно, связана с моим серверным приложением node.js.

Кто-нибудь может посоветовать, что я, возможно, пропустил?

1 Ответ

0 голосов
/ 29 мая 2020

Оказывается, socket.io не создает стандартный сокет TCP.

Мое решение заключалось в том, чтобы оставить код клиента нетронутым и изменить код сервера Node.js для использования net вместо библиотеки.

Если это может помочь кому-то еще, столкнувшемуся с той же проблемой, вот мой новый код:

const port = 3000;

const { createServer } = require('net');

const server = createServer();

// A counter to facilitate assigning of socket.id.
let counter = 0;

// An array of connected client sockets that we will broadcast to.
let sockets = {};

server.on('connection', (socket) => {
  socket.id = counter++;
  console.log(`A client has connected: ${socket.id}`);

  // Catch errors so they don't stop the application.
  socket.on('error', function () {
    console.log(`Client error: ${socket.id}`);
    delete sockets[socket.id];
  });

  // Set character encoding.
  socket.setEncoding('utf8');

  // Add socket to array.
  sockets[socket.id] = socket;

  // When connection ends, remove socket from array.
  socket.on('end', data => {
    console.log(`${socket.id} has disconnected`)
    delete sockets[socket.id];
  });
});

server.listen(port, () => {
  console.log(`RNG Server running on port number ${port}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...