wstcl 2025-01-14 21:03 采纳率: 38.1%
浏览 4
已结题

nodejs的socket.io,可以通过三方程序连接吗?

webstrom写了一个nodejs的socket.io,如果有客户端连接,则输出一条“某某客户端已连接”的日志,然后在同一项目建立一个静态网页,用前端js代码连接socket.io,运行后,在浏览器输入网址,发现后端成功输出“某某客户端已连接的日志,除浏览器外,其它程序也能作客户端连接,比如一个c# 编写的程序(入门学的vs.net),在网上找到解决方案,首先vs.net要通过NuGet下载安装一个SocketIoClientDotNet组件,说如此就能访问socket.io,但我运行了C# ,发现并没有连接上,所以nodejs的socket.io,所以如题能实现吗

nodejs、html网页前面调用 c#代码如下

nodejs

// 引入模块
var http = require('http');
var fs = require('fs');
var socketio = require('socket.io');

var server = http.createServer(function (request, response) {
    // 读取HTMLPage.html
    fs.readFile('index.html', function (error, data) {
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.end(data);
    });
}).listen(8080, function () {
    console.log('服务器监听地址在 http://127.0.0.1:8080');
});
const io = socketio(server, {
    cors: {
        origin: '*', // 或者指定特定的域
        methods: ["GET", "POST"],
        transports: ['websocket', 'polling'],
        credentials: true
    }
});
io.sockets.on('connection', function (socket)
{
    console.log(socket.id+"连接到服务器");
})

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>socket.io demo</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket;
        window.onload = function () {
            socket = io.connect()
        }
    </script>
</head>
<body>

</body>
</html>


c#

using Quobject.SocketIoClientDotNet.Client;
using System;

namespace Consolesocketio
{
    class Program
    {
        static void Main(string[] args)
        {
            string uri = "http://localhost:8080"; // 替换为你的socket.io服务器地址
            var socket = IO.Socket(uri);

            socket.On(Socket.EVENT_CONNECT, () =>
            {
                Console.WriteLine("Connected!");
               
            });

            socket.On("reply", (data) =>
            {
                Console.WriteLine("Received reply from server: " + data); // 接收服务器消息
            });

            socket.Connect();
            Console.ReadLine();
        }
    }
}

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-01-14 21:05
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    是的,Node.js 的 Socket.IO 可以通过第三方程序连接。你已经正确地配置了 Node.js 端的 Socket.IO,并且也创建了一个简单的 HTML 页面来测试前端连接。接下来的问题是如何让 C# 程序通过 Socket.IO 客户端库连接到这个服务器。

    解决方案

    1. 检查 Socket.IO 版本兼容性

    确保你使用的 SocketIoClientDotNet 组件与你的 Node.js Socket.IO 服务器版本兼容。Socket.IO 3.x 版本和之后的版本对协议进行了较大的改动,可能需要使用相应的客户端库版本。

    2. 配置 C# 客户端

    确保你的 C# 客户端代码正确配置了连接参数,并且能够处理 Socket.IO 协议。

    3. 调试信息

    在 C# 客户端代码中添加更多的调试信息,以便更好地理解连接过程中发生的情况。

    4. 更新代码

    以下是一些可能的改进:

    Node.js 服务端代码

    // 引入模块
    var http = require('http');
    var fs = require('fs');
    var socketio = require('socket.io');
    
    var server = http.createServer(function (request, response) {
        // 读取HTMLPage.html
        fs.readFile('index.html', function (error, data) {
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.end(data);
        });
    }).listen(8080, function () {
        console.log('服务器监听地址在 http://127.0.0.1:8080');
    });
    
    const io = socketio(server, {
        cors: {
            origin: '*', // 或者指定特定的域
            methods: ["GET", "POST"],
            transports: ['websocket', 'polling'],
            credentials: true
        }
    });
    
    io.on('connection', function (socket) {
        console.log(`${socket.id} 连接到服务器`);
        socket.emit('reply', '欢迎连接到服务器!');
    });
    

    HTML 前端代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>socket.io demo</title>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket;
            window.onload = function () {
                socket = io.connect();
                socket.on('reply', function (data) {
                    console.log('从服务器收到回复:', data);
                });
            }
        </script>
    </head>
    <body>
    </body>
    </html>
    

    C# 客户端代码

    using Quobject.SocketIoClientDotNet.Client;
    using System;
    
    namespace Consolesocketio
    {
        class Program
        {
            static void Main(string[] args)
            {
                string uri = "http://localhost:8080"; // 替换为你的socket.io服务器地址
                var socket = IO.Socket(uri);
    
                socket.On(Quobject.EngineIoClientDotNet.Constants.Namespace.Open, () => 
                {
                    Console.WriteLine("Connected!");
                    socket.Emit("reply", "Hello from C# client");
                });
    
                socket.On("reply", (data) =>
                {
                    Console.WriteLine("Received reply from server: " + data); // 接收服务器消息
                });
    
                socket.On(Quobject.EngineIoClientDotNet.Constants.Namespace.Error, (data) =>
                {
                    Console.WriteLine("Error: " + data);
                });
    
                socket.Connect();
                Console.ReadLine();
            }
        }
    }
    

    5. 测试连接

    运行 Node.js 服务器,然后分别打开浏览器页面和运行 C# 控制台应用程序,查看控制台输出信息,确认是否能够正常连接和通信。

    通过以上步骤,你应该能够解决 C# 客户端无法连接到 Node.js Socket.IO 服务器的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月22日
  • 已采纳回答 1月14日
  • 创建了问题 1月14日