要在同一台电脑上实现网页(前端)与 EXE 程序(后端)通过 UDP 通信,可以使用以下步骤。前端可以使用 JavaScript 通过 WebSocket 与自定义服务器进行通信,该服务器通过 UDP 发送和接收数据,再与 EXE 程序进行交互。由于浏览器本身不直接支持 UDP 通信,我们需要一个中间层来处理 UDP 数据传输。
以下是一个简单的示例,包括前端和后端代码。
前端(网页)
我们将使用 WebSocket 来与自定义服务器通信。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>UDP Communication</title>
</head>
<body>
<h1>UDP Communication with EXE</h1>
<input type="text" id="message" placeholder="Enter message">
<button onclick="sendMessage()">Send Message</button>
<p id="response"></p>
<script>
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = function(event) {
console.log('WebSocket is open now.');
};
ws.onmessage = function(event) {
document.getElementById('response').innerText = 'Received from EXE: ' + event.data;
};
ws.onclose = function(event) {
console.log('WebSocket is closed now.');
};
function sendMessage() {
const message = document.getElementById('message').value;
ws.send(message);
}
</script>
</body>
</html>
后端(Node.js 自定义服务器)
我们将使用 Node.js 创建一个 WebSocket 服务器,并使用 dgram
模块进行 UDP 通信。
1.安装 Node.js 和必要的模块。
//cmd
npm install ws
2.创建 WebSocket 服务器与 UDP 客户端。
//javascript
const WebSocket = require('ws');
const dgram = require('dgram');
const server = new WebSocket.Server({ port: 8080 });
const udpClient = dgram.createSocket('udp4');
// UDP 服务器地址和端口
const udpServerAddress = '127.0.0.1';
const udpServerPort = 41234;
udpClient.on('message', (msg, rinfo) => {
console.log(`UDP Message from ${rinfo.address}:${rinfo.port} - ${msg}`);
// 将从 EXE 程序接收到的消息通过 WebSocket 发送给网页
server.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(msg);
}
});
});
udpClient.on('listening', () => {
const address = udpClient.address();
console.log(`UDP Client listening on ${address.address}:${address.port}`);
});
udpClient.bind(41235); // UDP 客户端端口
server.on('connection', (ws) => {
console.log('New client connected');
ws.on('message', (message) => {
console.log(`Received message => ${message}`);
// 将从网页接收到的消息通过 UDP 发送给 EXE 程序
const buf = Buffer.from(message);
udpClient.send(buf, 0, buf.length, udpServerPort, udpServerAddress, (err) => {
if (err) {
console.error(err);
ws.close();
} else {
console.log('UDP message sent');
}
});
});
ws.on('close', () => {
console.log('Client has disconnected');
});
});
console.log('WebSocket server is running on ws://localhost:8080');
详细参见:使用 Node.js 创建一个 WebSocket 服务器-CSDN博客
EXE 程序(C# 示例)
以下是一个简单的 C# UDP 服务器示例,用于接收和发送 UDP 数据。
- 创建一个新的 C# 控制台应用程序。
- 使用以下代码:
//c#
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpServer
{
static void Main()
{
UdpClient udpListener = new UdpClient(41234);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 41234);
try
{
while (true)
{
Console.WriteLine("Waiting for a connection...");
byte[] bytes = udpListener.Receive(ref groupEP);
string receivedData = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
Console.WriteLine($"Received: {receivedData} from {groupEP}");
// 处理接收到的数据并发送响应
string response = "Hello from EXE";
byte[] sendBytes = Encoding.ASCII.GetBytes(response);
udpListener.Send(sendBytes, sendBytes.Length, groupEP);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
udpListener.Close();
}
}
}
运行步骤
- 启动 C# UDP 服务器。
- 启动 Node.js WebSocket 服务器。
- 打开网页并发送消息。
这样,网页上的消息会通过 WebSocket 发送到 Node.js 服务器,Node.js 服务器再通过 UDP 发送到 C# EXE 程序。C# EXE 程序处理完消息后,可以通过 UDP 发送响应,Node.js 服务器再通过 WebSocket 将响应发送到网页。