单向和双向协议的实现

301 阅读3分钟

image.png

单向协议

// 1、加载net核心模块
const net = require('net')
// 2、创建一个服务器应用程序,得到一个服务器实例对象
const server = net.createServer()
// 3、监听客户端的连接事件connection,连接成功就会执行回调处理函数
server.on('connection', function () {
    console.log('有客户端连接上来了');
})
// 5、服务器有一个事件叫做listening,表示开启监听成功之后回调处理函数
server.on('listening', function () {
    console.log('服务器开启监听成功了,正在等待客户端连接')
})
// 4、启动服务器,开启监听
// 监听127.0.0.1:3000只能被本机所访问
server.listen(3000, '127.0.0.1')

启动服务器

image.png

启动另一个客户端输入:

telnet 127.0.0.1 3000

常见的一些错误:

telnet不是内部命令或找不到

解决:win+R 输入 control 弹出

image.png

image.png 重新输入

telnet 127.0.0.1 3000

image.png

当客户端连接成功后回调函数中的socket对象的各个属性(单向通信)

// 在服务器中使用Socket
// 1、加载net核心模块
const net = require('net')
// 2、创建一个服务应用程序,得到一个服务器
const server = net.createServer()
let count = 0
// 5、监听客户端的连接事件,连接成功就会执行回调处理函数
// 每次回调函数被调用,就会有一个新的socket对象在回调函数中
server.on('connection', (socket) => {
    socket.write('连接成功!~')
    count++
    // 当前连接人数
    console.log("当前连接人数:" + count);
    // 当前连接成功之后的客户端发送一个消息
    socket.write('欢迎连接服务器' + '\n')
    // 打印socket对象中的属性
    console.log('要写入缓冲区的字节数:' + socket.bufferSize + '\n');
    console.log('远程IP地址字符串:' + socket.remoteAddress + '\n');
    console.log('远程IP协议字符串:' + socket.remoteFamily + '\n');
    // 远程端口一般服务器要用的端口是2的8次方
    console.log('远程端口:' + socket.remotePort + '\n')
    console.log('网络连接绑定的本地IP地址字符串:' + socket.localAddress + '\n')
    console.log('本地端口地址:' + socket.bytesRead + '\n');
    console.log('接收到的字节数:' + socket.bytesWritten + '\n');
    // 暂停一下
    socket.pause()
    setTimeout(() => {
        // 恢复一下
        socket.resume()
        // 远程IP地址字符串
        socket.write('remoteAddress:' + socket.remoteAddress + '\n')
        // 远程端口
        socket.write('remotePort:' + socket.remotePort + '\n')
    }, 5000)
})
// 3、启动服务器,开启监听
server.listen(3000, '127.0.0.1', () => {
    console.log('服务器开启!');
})
// 4、服务器有一个事件叫做listening,表示开启监听成功之后回调处理函数
server.on('listening', () => {
    console.log('服务器开启监听成功,服务器正在等待连接.........');
})

image.png image.png image.png

image.png

服务器和客户端双向通信

客户端

/* 
双向通信-客户端
*/
// 导入net模块
const net = require('net')
// 当调用createConnection之后,就会到的一个与服务器连接的端口
// 该对象中包含当前客户端与服务器通信的ip地址和端口号
const client = net.createConnection({
    port: 3000
})
// 什么时候客户端和服务器连接成功了
// 可以通过监听client的connect事件来处理
client.on('connect', () => {
    // 客户端与服务器连接成功了
    console.log('服务器连接成功!');
    client.write('客户端问服务端:你吃了吗?')
})
client.on('data', (data) => {
    // 输出服务器发送给当前客户端的数据
    console.log(data.toString());
})

服务器

/* 
双向通信-服务器
*/
const net = require('net')
const server = net.createServer()
// 每一个客户端与服务器建立连接成功之后,都会触发一次connection
server.on('connection', (socket) => {
    // 
    socket.on('data', (data) => {
        console.log(data.toString());
        socket.write('服务端回复客户端:我吃的小豆包')
    })
})
server.listen(3000, '127.0.0.1', () => {
    console.log('server listening at port 3000');
})