demo-socket
在通过 WebSocket 或者 TCP Socket 进行通信时,如果服务器端期望接收 ArrayBuffer
类型的数据,那么客户端也需要相应地发送二进制数据。然而,对于字符串 "DDT1" 这样的文本数据,你需要先将其转换为二进制格式(如 Uint8Array
或 ArrayBuffer
),然后再发送。
以下是一个使用 JavaScript WebSocket 客户端发送字符串作为 ArrayBuffer
并接收服务器端响应的基本示例:
客户端代码(JavaScript WebSocket)
// 假设已经建立了 WebSocket 连接,并且 ws 是你的 WebSocket 对象
const message = "DDT1";
const encoder = new TextEncoder(); // 用于将字符串转换为 Uint8Array
// 将字符串转换为 Uint8Array
const uint8Array = encoder.encode(message);
// 如果需要 ArrayBuffer,可以从 Uint8Array 转换
const arrayBuffer = uint8Array.buffer;
// 发送 ArrayBuffer
ws.send(arrayBuffer);
// 接收服务器的响应
ws.onmessage = function(event) {
// 注意:这里 event.data 可能是 ArrayBuffer、Blob、String 或其他类型,取决于服务器发送了什么
if (event.data instanceof ArrayBuffer) {
// 转换为 Uint8Array 进行处理
const uint8ArrayResponse = new Uint8Array(event.data);
// 如果服务器发送的是文本,你可能想要将其转换回字符串
const decoder = new TextDecoder('utf-8');
const responseString = decoder.decode(uint8ArrayResponse);
console.log('Received:', responseString); // 应该打印 "ok"
} else if (typeof event.data === 'string') {
// 如果服务器直接发送字符串,则直接处理
console.log('Received:', event.data);
}
};
服务器端代码(Node.js 示例)
在服务器端(假设使用 Node.js),你可能会使用 ws
(WebSocket)或 net
(TCP)模块。以下是使用 ws
模块的一个简单示例,展示如何处理接收到的 ArrayBuffer
并发送回字符串 "ok":
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(data) {
// 检查接收到的数据是否是 ArrayBuffer
if (data instanceof ArrayBuffer) {
// 转换为 Uint8Array 或其他你需要的格式
const uint8Array = new Uint8Array(data);
// 在这里你可以处理 uint8Array 中的数据
// 假设你要发送回 "ok"
const encoder = new TextEncoder();
const okBuffer = encoder.encode('ok');
ws.send(okBuffer); // 发送 ArrayBuffer
}
});
});
请注意,上述示例假设你正在使用 WebSocket 通信,并且服务器和客户端都正确配置了 WebSocket 连接。如果你使用的是 TCP Socket,那么你需要使用不同的库(如 Node.js 的 net
模块)并相应地处理数据。
此外,还需要确保服务器和客户端都正确地处理了编码和解码过程,以确保数据在发送和接收时保持一致。