You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过Node.js WebSocket实现网页与C语言Server.exe的连接?

嘿,既然你有多年JavaScript经验,上手Node.js真的没那么难!咱们一步步拆解这个需求,很快就能搞定:

核心架构思路

首先明确整个链路:你的网页(从http://10.211.55.8/edu-connect/gate.php打开)会先连接到Node.js的WebSocket服务,再由Node.js服务作为中间桥接,去连接PC_1上的Server.exe(10.211.55.10:15842),实现网页与C语言服务端的双向通信。

步骤1:搭建Node.js环境

先在PC_2(或者任意能同时访问PC_1和网页的机器)上安装Node.js,装好后打开终端输入以下命令确认安装成功:

node -v
npm -v
步骤2:创建Node.js WebSocket-TCP转发服务

这个服务的作用是把网页的WebSocket消息转成TCP协议发给C服务端,再把C服务端的TCP消息转成WebSocket发给网页。

  1. 新建一个文件夹(比如ws-tcp-bridge),打开终端进入该文件夹,执行:
npm init -y
npm install ws

这里ws是Node.js生态中最常用的WebSocket库,net是Node.js内置的TCP模块,不用额外安装。

  1. 在文件夹里创建bridge.js文件,写入以下代码:
const WebSocket = require('ws');
const net = require('net');

// 启动WebSocket服务,监听端口设为8080(可自行修改)
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
  console.log('网页客户端已连接');
  
  // 连接到PC_1的C语言服务端
  const tcpClient = net.connect({
    host: '10.211.55.10',
    port: 15842
  });

  // 转发网页消息到C服务端
  ws.on('message', (message) => {
    tcpClient.write(message);
  });

  // 转发C服务端消息到网页
  tcpClient.on('data', (data) => {
    // 如果C服务端用二进制协议,直接去掉toString()发送原始数据即可
    ws.send(data.toString());
  });

  // 处理断开连接的清理逻辑
  ws.on('close', () => {
    console.log('网页客户端已断开');
    tcpClient.end();
  });

  tcpClient.on('error', (err) => {
    console.error('连接C服务端出错:', err);
    ws.close();
  });
});

console.log('Node.js WebSocket转发服务已启动,监听端口8080');
步骤3:启动Node.js服务

在终端里进入ws-tcp-bridge文件夹,执行:

node bridge.js

看到输出Node.js WebSocket转发服务已启动,监听端口8080就说明服务正常运行了。

步骤4:修改gate.php页面,添加WebSocket客户端代码

在你的gate.php页面中插入一段JavaScript代码,让网页连接到Node.js的WebSocket服务:

<script>
// 替换为Node.js服务所在机器的IP和端口
const ws = new WebSocket('ws://10.211.55.8:8080');

// 连接成功后的回调
ws.onopen = () => {
  console.log('已连接到Node.js WebSocket服务');
  // 可在这里发送测试消息给C服务端
  ws.send('Hello from web client!');
};

// 接收C服务端消息的回调
ws.onmessage = (event) => {
  console.log('收到C服务端消息:', event.data);
  // 这里可以把消息展示在网页上,比如更新DOM
};

// 连接关闭的回调
ws.onclose = () => {
  console.log('WebSocket连接已关闭');
};

// 错误处理
ws.onerror = (error) => {
  console.error('WebSocket连接出错:', error);
};
</script>
关键注意事项
  • 确保PC_1的15842端口、Node.js服务的8080端口都没有被防火墙拦截,能正常互相访问。
  • 如果你的Server.exe使用的是二进制通信协议,把Node.js代码里的data.toString()改成直接发送data即可(WebSocket原生支持二进制帧)。
  • 因为你有JS基础,这段代码逻辑其实很简单:就是做一个消息转发器,把两边的消息互相转递而已。

内容的提问来源于stack exchange,提问作者user9431147

火山引擎 最新活动