socket客户端接收大文件
时间: 2023-07-31 15:13:25 浏览: 45
在 Node.js 中,可以使用 `net` 模块创建 TCP 服务器和客户端,通过 TCP 协议进行大文件传输。
以下是一个简单的示例代码:
服务器端:
```javascript
const net = require('net')
const fs = require('fs')
const server = net.createServer((socket) => {
console.log('client connected')
// 创建可写流
const writeStream = fs.createWriteStream('output.txt', { flags: 'a' })
// 监听可读流的 data 事件
socket.on('data', (data) => {
console.log(`received data: ${data.length} bytes`)
// 将接收到的数据写入到可写流
writeStream.write(data)
})
// 监听可读流的 end 事件
socket.on('end', () => {
console.log('client disconnected')
// 关闭可写流
writeStream.end(() => {
console.log('file saved')
})
})
})
server.listen(3000, () => {
console.log('server started')
})
```
在上面的示例中,我们创建了一个 TCP 服务器,并在每个新建的 socket 连接上创建了一个可写流,用于将接收到的数据写入到名为 `output.txt` 的文件中。
客户端:
```javascript
const net = require('net')
const fs = require('fs')
const client = new net.Socket()
client.connect(3000, () => {
console.log('connected to server')
})
// 监听可读流的 data 事件
client.on('data', (data) => {
console.log(`received data: ${data.length} bytes`)
// 将接收到的数据写入到文件
const writeStream = fs.createWriteStream('output.txt', { flags: 'a' })
writeStream.write(data)
})
// 监听可读流的 end 事件
client.on('end', () => {
console.log('connection closed')
// 关闭可写流
writeStream.end(() => {
console.log('file saved')
})
})
// 创建可读流
const readStream = fs.createReadStream('input.txt')
// 监听可读流的 data 事件
readStream.on('data', (data) => {
console.log(`send data: ${data.length} bytes`)
// 发送数据
client.write(data)
})
// 监听可读流的 end 事件
readStream.on('end', () => {
console.log('file sent')
// 关闭连接
client.end()
})
```
在上面的示例中,我们创建了一个 TCP 客户端,并在连接成功后创建了一个可读流,用于从名为 `input.txt` 的文件中读取数据,并将数据发送到服务器端。同时,我们还创建了一个可写流,用于将接收到的数据写入到名为 `output.txt` 的文件中。需要注意的是,我们需要在 `client.on('data')` 回调函数中创建可写流,以确保每次接收到数据都可以写入到文件中。
另外,需要注意在客户端中,我们监听了 `client.on('end')` 事件,以确保在连接关闭时,将可写流关闭并保存文件。