下面我将详细讲解“Node.js开发之套接字(socket)编程入门示例”的完整攻略。
套接字(socket)编程入门
什么是套接字(socket)编程?
套接字(socket)是一种通信机制,其可用于不同计算机之间的通信,也可用于同一计算机内进程之间的通信。套接字编程则是基于套接字的通信编程。在Node.js中,通过使用net模块提供的套接字API,即可实现套接字编程。套接字编程主要用于实现网络通信功能。
创建服务端套接字
要创建一个服务端套接字,可以使用以下代码:
const net = require('net');
//创建服务端套接字
const server = net.createServer((socket) => {
//新的客户端连接时,会执行该回调函数
//可以在该回调函数中处理从客户端接收到的数据
//处理完成之后,关闭套接字
socket.end();
});
//通过listen方法对服务端进行监听
server.listen({
host: '127.0.0.1',
port: 3000
}, () => {
console.log('服务端套接字已经启动');
})
在上述代码中,我们通过net.createServer()方法创建了一个服务端套接字,该方法的参数是一个回调函数,该函数会在新的客户端连接时执行。在该回调函数中,我们可以处理从客户端接收到的数据,并在处理完成之后关闭套接字。
创建客户端套接字
要创建一个客户端套接字,可以使用以下代码:
const net = require('net');
//创建一个客户端套接字
const client = net.connect({
host: '127.0.0.1',
port: 3000
},() => {
//连接成功时,会执行该回调函数
console.log('客户端套接字已经连接');
//向服务端发送数据
client.write('hello world');
});
//当从服务端接收到数据时,会执行该回调函数
client.on('data', (data) => {
console.log(data.toString());
//处理完成之后,关闭套接字
client.end();
});
在上述代码中,我们通过net.connect()方法创建了一个客户端套接字,该方法的参数是一个对象,其中包含需要连接的服务器的主机和端口信息。在连接成功时,会执行回调函数,在该回调函数中可以向服务器发送数据。同时,我们也监听了客户端套接字的data事件,当从服务端接收到数据时,会触发该事件,我们在该事件中处理接收到的数据,并在处理完成之后关闭套接字。
示例说明1
以下示例展示了通过套接字实现的一个简单的聊天室应用:
const net = require('net');
//存储客户端套接字的数组
const clients = [];
//创建服务端套接字
const server = net.createServer((socket) => {
//新的客户端连接时,会执行该回调函数
console.log('新的客户端已经连接');
//将当前客户端套接字存储起来
clients.push(socket);
//为当前客户端套接字绑定data事件
socket.on('data', (data) => {
//向除当前客户端外的其他客户端发送数据
clients.filter(item => item != socket).forEach(client => {
client.write(socket.remoteAddress + ':' + socket.remotePort + '说:' + data);
});
});
//为当前客户端套接字绑定close事件
socket.on('close',() => {
//从数组中删除当前客户端套接字,表示该客户端已经离开聊天室
clients.splice(clients.indexOf(socket),1);
console.log('客户端已经离开聊天室');
});
});
//通过listen方法对服务端进行监听
server.listen({
host: '127.0.0.1',
port: 3000
}, () => {
console.log('服务端套接字已经启动');
})
在以上示例中,我们首先创建了一个数组用于存储客户端套接字,然后在服务端套接字的回调函数中将每个新的客户端套接字存储到该数组中。在为每个客户端套接字绑定data事件时,我们通过filter方法过滤掉当前客户端套接字,然后对于剩余的套接字,均向它们发送当前客户端发送过来的数据。在为每个客户端套接字绑定close事件时,我们从存储客户端套接字的数组中删除离开聊天室的客户端套接字。
示例说明2
以下示例展示了一个简单的文件传输应用:
const net = require('net');
const fs = require('fs');
//创建服务端套接字
const server = net.createServer((socket) => {
//新的客户端连接时,会执行该回调函数
console.log('新的客户端已经连接');
//为当前客户端套接字绑定data事件
socket.on('data', (data) => {
//从客户端发送过来数据的第一位获取文件名
const fileName = data.slice(0, data.indexOf('\n')).toString();
console.log('将要传输的文件名为:' + fileName);
//从客户端发送过来数据的第一位后两位获取文件大小
const fileSize = parseInt(data.slice(data.indexOf('\n')+1, data.indexOf('\n')+3));
console.log('将要传输的文件大小为:' + fileSize + '字节');
//从客户端发送过来的数据中提取文件内容
const fileContent = data.slice(data.indexOf('\n')+3);
//将提取的文件内容写入文件中
fs.writeFile(fileName, fileContent, (err) => {
if (err) {
console.log('写入文件失败');
} else {
console.log('写入文件成功');
}
});
});
});
//通过listen方法对服务端进行监听
server.listen({
host: '127.0.0.1',
port: 3000
}, () => {
console.log('服务端套接字已经启动');
})
在以上示例中,我们首先创建了一个服务端套接字,在服务端套接字的回调函数中,我们只为每个客户端套接字绑定了data事件。在该事件中,我们首先从客户端发送过来的数据中获取文件名和文件大小,接着从数据中提取文件内容,然后将文件内容写入文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js开发之套接字(socket)编程入门示例 - Python技术站