【问题标题】:Cannot connect to socket.io connection in node.js无法连接到 node.js 中的 socket.io 连接
【发布时间】:2020-05-30 04:42:12
【问题描述】:

我是 node.js 的新手,在阅读了 Wexler 书的相关部分后,我正在尝试使用 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 服务器应用程序上。

谁能告诉我可能错过了什么?

【问题讨论】:

  • 似乎 socket.io 服务器代码仅适用于其客户端代码

标签: node.js socket.io node-streams


【解决方案1】:

原来 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}`);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多