写一个node创建tcp协议并实现文件传输实例
时间: 2024-04-04 20:35:56 浏览: 43
好的,下面是一个使用 Node.js 创建 TCP 协议并实现文件传输的示例代码:
```javascript
const net = require('net');
const fs = require('fs');
const server = net.createServer((socket) => {
console.log(`Client connected: ${socket.remoteAddress}:${socket.remotePort}`);
// 监听客户端发送的数据
socket.on('data', (data) => {
const json = JSON.parse(data.toString());
// 判断消息类型
switch (json.type) {
case 'file': // 客户端上传文件
console.log(`Receiving file from client: ${json.filename}`);
const fileStream = fs.createWriteStream(json.filename);
// 将数据流写入文件
socket.pipe(fileStream);
// 文件传输完成事件
fileStream.on('finish', () => {
console.log(`File received from client: ${json.filename}`);
// 发送确认消息给客户端
socket.write(JSON.stringify({ type: 'file_received', filename: json.filename }));
});
break;
default:
console.log(`Unknown message from client: ${data.toString()}`);
break;
}
});
// 监听客户端断开连接事件
socket.on('end', () => {
console.log(`Client disconnected: ${socket.remoteAddress}:${socket.remotePort}`);
});
// 监听客户端错误事件
socket.on('error', (err) => {
console.log(`Client error: ${err}`);
});
});
// 监听服务器错误事件
server.on('error', (err) => {
console.log(`Server error: ${err}`);
});
// 监听服务器启动事件
server.on('listening', () => {
console.log(`Server listening on ${server.address().port}`);
});
// 启动服务器
server.listen(8989, () => {
console.log(`Server started on port ${server.address().port}`);
});
```
在上面的代码中,我们使用 `net.createServer()` 方法创建了一个 TCP 服务器,并通过 `socket.on()` 方法监听客户端连接、数据传输和断开连接事件。当客户端发送一个上传文件的请求时,服务器会创建一个文件写入流,并通过 `socket.pipe()` 方法将数据流写入到文件中,同时监听文件传输完成事件。当文件传输完成后,服务器会发送一个确认消息给客户端。
下面是客户端的示例代码:
```javascript
const net = require('net');
const fs = require('fs');
const client = new net.Socket();
// 连接服务器
client.connect(8989, '127.0.0.1', () => {
console.log('Connected to server');
// 上传文件
const filename = 'test.txt';
const fileContent = fs.readFileSync(filename);
client.write(JSON.stringify({ type: 'file', filename: filename }));
client.write(fileContent);
});
// 监听服务器发送的消息
client.on('data', (data) => {
const json = JSON.parse(data.toString());
if (json.type === 'file_received') {
console.log(`File received by server: ${json.filename}`);
client.end();
} else {
console.log(`Unknown message from server: ${data.toString()}`);
}
});
// 监听服务器断开连接事件
client.on('end', () => {
console.log('Disconnected from server');
});
// 监听客户端错误事件
client.on('error', (err) => {
console.log(`Client error: ${err}`);
});
```
在上面的代码中,我们创建了一个 TCP 客户端,并通过 `client.connect()` 方法连接到服务器。客户端会读取一个文件内容,并通过 `client.write()` 方法向服务器发送一个上传文件的请求。当服务器发送一个确认消息后,客户端会关闭连接。
注意:在实际使用中,你可能需要对代码进行一些修改,以满足你的具体需求。例如,你可能需要添加一些错误处理逻辑,或者对文件传输进行分段处理等等。
阅读全文