js实现tcp协议
在JavaScript中实现TCP协议通常需要借助Node.js环境,因为浏览器端的JavaScript受限于安全策略,无法直接操作TCP套接字。以下是基于Node.js的net模块实现TCP通信的方法:
创建TCP服务器
使用net.createServer()方法创建TCP服务器,监听指定端口:
const net = require('net');
const server = net.createServer((socket) => {
console.log('客户端已连接');
socket.on('data', (data) => {
console.log(`收到数据: ${data}`);
socket.write(`服务器回复: ${data}`);
});
socket.on('end', () => {
console.log('客户端断开连接');
});
});
server.listen(8080, () => {
console.log('服务器监听端口 8080');
});
创建TCP客户端
通过net.createConnection()连接TCP服务器并发送数据:
const net = require('net');
const client = net.createConnection({ port: 8080 }, () => {
console.log('已连接到服务器');
client.write('Hello TCP Server!');
});
client.on('data', (data) => {
console.log(data.toString());
client.end();
});
client.on('end', () => {
console.log('已断开与服务器的连接');
});
错误处理
为TCP连接添加错误监听器:
socket.on('error', (err) => {
console.error('连接错误:', err);
});
自定义协议设计
在实际应用中,通常需要设计应用层协议(如定义消息头尾分隔符):
// 服务器端处理自定义协议
socket.on('data', (data) => {
const messages = data.toString().split('|');
messages.forEach(msg => {
if (msg) console.log(`处理消息: ${msg}`);
});
});
// 客户端发送带分隔符的消息
client.write('第一条消息|第二条消息|');
注意事项
Node.js的TCP实现是流式传输,需注意数据分包问题。重要数据建议添加长度前缀或特殊分隔符。
浏览器端可通过WebSocket实现类似功能,但这不是原生TCP协议。纯前端JavaScript无法直接实现TCP通信,这是浏览器的安全限制。
对于需要二进制数据传输的场景,可以使用Buffer对象:
socket.write(Buffer.from([0x01, 0x02, 0x03]));






