例1:
服务器端代码:
const net = require('net')
//创建服务器, 当一个新的连接建立的时候触发回调。回调中的参数client为连接对象
const server = new net.Server((client) => {
//向连接上的客户端发送消息
client.write('你好,连接成功!')
client.setEncoding('utf8')
//读取客户端发来的消息
client.on('data', (chunk) => {
console.log(chunk)
})
})
//启动一个 TCP 服务监听输入的 port 和 host
server.listen('9527', () => {
console.log(`opend server on ${server.address().address}:${server.address().port}` )
})
客户端代码:
const net = require('net')
//创建一个 socket 对象,初始化一个 TCP 连接。当连接上服务端的时候触发回调
const client = net.createConnection(9527, () => {
console.log('已连接到服务器');
//向服务器端发送消息
client.write('你好世界!\r\n');
});
client.setEncoding('utf8')
//读取服务器端发送过来的数据
client.on('data', (chunk) => {
console.log(chunk)
client.end()
})
client.on('end', (chunk) => {
console.log('已和服务器端断开连接')
})
开启两个终端,分别运行上面代码:
客户端:
image.png
服务器端:
image.png
例2:聊天室功能
服务端代码:
const net = require('net')
//创建服务器,
const server = new net.createServer()
//存储连接上服务器的所有客户端的数组
let clients = []
let clientName = 0
//当一个新的连接建立的时候触发.回调中的参数client为连接对象
server.on('connection', (client) => {
client.name = ++clientName
clients[client.name] = client
client.write(`${client.name}已上线`)
client.setEncoding('utf8')
//读取客户端发来的消息
client.on('data', (chunk) => {
console.log(chunk)
broadcast(client, chunk)
})
client.on('error', (e) => {
console.log('client error' + e)
//关闭client
client.end()
})
client.on('close', (e) => {
//把关闭的哪个客户端从clients数组中删除
delete clients[client.name]
console.log(client.name + '下线了')
})
})
function broadcast(client, chunk) {
//向连接上服务器的每一个客户端发送消息
for(var key in clients) {
clients[key].write(client.name + '说:' + chunk)
}
}
//启动一个 TCP 服务监听输入的 port 和 host
server.listen('9527', () => {
console.log(`opend server on ${server.address().address}:${server.address().port}` )
})
客户端代码:
const net = require('net')
const readline = require('readline')
//创建一个 socket 对象
const client = new net.Socket()
client.setEncoding('utf8')
//在给定的套接字上启动一个连接,当连接上服务端的时候触发回调
client.connect(9527, '127.0.0.1', () => {
console.log('已连接到服务器');
//向服务器端发送消息
client.write('你好世界!\r\n');
})
//读取服务器端发送过来的数据
client.on('data', (chunk) => {
console.log(chunk)
say()
})
client.on('error', (err) => {
console.log('error' + err)
})
client.on('close', (chunk) => {
console.log('已和服务器端断开连接')
})
const r1 = readline.createInterface({
input: process.stdin,
output: process.stdout
})
function say () {
r1.question('请输入:\n', (inputMsg) => {
if(inputMsg !== 'bye') {
//向服务器端发送数据
client.write(inputMsg + '\n')
}else {
client.destory()
r1.close()
}
})
}
网友评论