当前位置: 首页 > 知识库问答 >
问题:

不能从服务器发送到客户端和从客户端发送到服务器[socket.io]

郎琪
2023-03-14

我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。

我的ssl证书位于./security/cert.key./security/cert.pem中,它们加载正确。运行在https://localhost:5000上的服务器

import fs from "fs";
import https from "https";
import socketio from "socket.io";
import express from "express";

// HTTPS optiosn
const httpsOptions = {
    key: fs.readFileSync("./security/cert.key"),
    cert: fs.readFileSync("./security/cert.pem"),
};

// Setup express and https server
const app = express();
const server = https.createServer(httpsOptions, app);

// Setup socket io
const io = socketio.listen(server, {
    origins: "https://localhost:3000",
    transports: ["websocket"],
});

server.listen(5000, () => {
    console.log(`server listening on https://localhost:5000`);
});


io.listen(server);

io.on("connection", (socket) => {
    console.log("new socket connected!");
    console.log(`data = ${socket.handshake.query.data}`);
    socket.emit("some-event");
    socket.on("some-event-2", () => console.log("some-event-2 happened!"));
});

我的示例react组件。我的react应用程序运行在https://localhost:3000上。HTTPS连接良好,工作良好。

import React from "react";
import io from "socket.io-client";

const Sandbox: React.FC = () => {
    const query = {
        "data": 123,
    };
    const socket = io.connect("https://localhost:5000", {
        secure: true,
        query,
        transports: ["websocket"],
    });
    socket.on("connect", () => console.log("connect!"));
    socket.on("some-event", () => console.log("some event happened"));
    socket.emit("some-event-2");
    return <React.Fragment />;
};


export default Sandbox;

我该怎么办?也许我在https中错误地使用了socket.io?

共有1个答案

石喜
2023-03-14

我修正了我的错误。

问题是我首先创建了https服务器,之后只调用.listen()listen()-不是void,而是返回另一个服务器OBJ。您需要在io.listen()中传递.listen()函数的结果

// Don't do that❌
var server = https.createServer(options, app);
server.listen(5000);
io.listen(server);

// Do that✅
var server = https.createServer(options, app).listen(5000);
io.listen(server);
 类似资料:
  • 问题内容: 首先,我将请求的文件从服务器发送到客户端,然后再将文件的计算出的sha从服务器发送到客户端,以便客户端可以检查发送文件和接收文件中的sha是相同的。 我设法发送了文件,但是当我尝试也发送sha(这是一个变量)时,我收到一个错误消息(我相信sha也已添加到文件内容中) 如何分别发送? 和客户: 问题答案: 您应该重新设计应用程序的工作方式: 首先,服务器将文件大小发送给客户端 客户端读取

  • 从server-A(可通过静态IP全局访问)开始,我将UDP套接字绑定到0.0.0.0:25000。 然后,在(住宅)NAT 后面使用客户端 A,我将 UDP 套接字绑定到 0.0.0.0:25000。然后,客户端 A 将数据包发送到服务器 A。 服务器 A 接收数据包。服务器 A 记录远程套接字 K,数据包从中 NAT 开始。服务器 A 向 K 发送数据包,目的是 NAT 将数据包转发到客户端

  • 我正在寻找一些关于如何实现一个能够将音频发送到服务器的Java客户端的链接/源代码/教程(见下文)。它将能够发送一个音频文件,然后由服务器接收并通过计算机扬声器播放。 我还想问,对于这种情况,使用UDP或TCP服务器会更好吗?因为我将开发一个android应用程序,它可以录制声音,然后通过电脑扬声器将声音发送到服务器进行实时播放。

  • 问题内容: 由于我是Web服务的新手,请您告诉我问题的答案。我的问题是 我想实现一个Web服务,当客户端调用此Web服务时,该服务会向客户端发送pdf文件。 请有人帮我提供一段不错的代码或解释。 现在可以请一个人解决我的错误。 12-23 09:42:48.429:调试/安装(32):DexInv:-开始’/data/app/vmdl33143.tmp’— 12-23 09:42:51.708:调

  • 问题内容: 我正在尝试从服务器向客户端发送文件,即服务器请求的客户端。客户端指定中的文件,然后将其发送到服务器,服务器将文件大小添加到文件中,然后将其返回给客户端。 客户端向其管道添加具有正确文件大小的新文件。 服务器使用上下文和所需文件创建一个新文件,并尝试发送该文件,但是从不读取该字节。 我在这里做错了什么? 记录 客户 FileRequestHandler.java FileChunkReq

  • 问题内容: 我正在尝试找到一种方法,将不同文件类型的文件从服务器发送到客户端。 我在服务器上有以下代码将文件放入字节数组: 然后,我将fileData作为字符串发送给客户端。这对于txt文件效果很好,但是当涉及到图像时,我发现尽管它可以很好地创建包含数据的文件,但图像无法打开。 我不确定我是否正在按照正确的方式进行操作。谢谢您的帮助。 问题答案: 如果要读取/写入二进制数据,则应使用字节流(Inp