zoukankan      html  css  js  c++  java
  • Node.js 构建TCP服务

    构建TCP服务

    • 三次握手连接:
      1.客户端请求连接
      2.服务器响应
      3.开始传输
      服务端
    // 构建TCP服务 服务端
    const net = require('net')
    
    const server = net.createServer()
    
    server.on('connection', clientSocket => {
      console.log('有新的客户端连接了')
      //服务端通过 clientSocket 监听 data 事件
      clientSocket.on('data', data => {
        // console.log(data)
        // 把数据转换成字符串格式
        console.log('来自客户端消息:', data.toString())
      })
      // 通过clientSocket 给当前连接的客户端发送数据
      clientSocket.write('hello,我是服务端')
      // 服务端监听 data 事件,获取终端中输入的数据
      process.stdin.on('data', data => {
        // 把终端中输入的数据发送给客户端
        clientSocket.write(data.toString().trim())
      })
    })
    
    // 监听端口
    server.listen(3000, () => console.log('Server runing at http://127.0.0.1:3000'))
    
    

    客户端

    // 构建TCP连接服务 客户端
    const net = require('net')
    
    const client = net.createConnection({
      host: '127.0.0.1',
      port: 3000
    })
    
    client.on('connect', () => {
      console.log('连接服务器成功了')
      // 当客户端与服务端建立连接成功以后,客户端就可以给服务器发数据了
      client.write('word,我是客户端')
      // 当客户端与服务端建立连接以后,我么可以监听准端的输入
      // 获取终端命令行中的输入发送给服务端
      process.stdin.on('data', data => {
        // console.log(data)
        // 这是获取到的终端命令行输入的数据
        // console.log(data.toString())
        // 把获取到的终端命令行输入的数据发给服务端
        // client.write(data)
        // 去除数据中的回车和空格再发送给服务端
        client.write(data.toString().trim())
      })
    })
    
    // 客户端监听 data 事件
    // 当服务端发消息过来就会触发该事件
    client.on('data', data => {
      // console.log(data)
      // 把数据转换成字符串格式
      console.log('来自服务端消息:', data.toString())
    })Ï
    

    案例:聊天室

    服务端:

    // 构建TCP服务 服务端
    const net = require('net')
    
    // 创建一个服务器实例
    const server = net.createServer()
    
    const clients = []
    
    server.on('connection', clientSocket => {
      // 把当前连接的客户端通信接口存储到数据中
      clients.push(clientSocket)
      console.log('有新客户端连接')
    
      // 把服务端终端输入的内容群发给所有客户端
      process.stdin.on('data', data => {
        clientSocket.write('服务端公告:' + data.toString().trim())
      })
    
      clientSocket.on('data', data => {
        console.log('来自客户端消息:', data.toString())
        // 遍历所有的客户端连接发送数据
        clients.forEach(socket => {
          // 排除掉发消息自身的那个客户端
          if (socket !== clientSocket) {
            socket.write(data)
          }
        })
      })
    })
    
    server.listen(3500, () => {
      console.log('Server running At http://127.0.1.1:3500')
    })
    

    客户端:

    // 构建TCP连接服务 客户端
    const net = require('net')
    
    // 创建一个客户端实例
    const client = net.createConnection({
      host: '127.0.0.1',
      port: 3500
    })
    
    // 监听连接事件
    client.on('connect', () => {
      console.log('客户端与连接服务器成功')
      // 把终端输入内容发给服务端
      process.stdin.on('data', data => {
        client.write(data.toString().trim())
      })
    })
    
    client.on('data', data => {
      console.log(data.toString())
    })
    
  • 相关阅读:
    我的大学学习之路
    拉勾上的一道题目
    python中文处理之encode/decode函数
    几个容易出错的css盒子模型细节
    洗牌算法shuffle
    判断正整数是否对称
    一种快速求fibonacci第n个数的算法
    利用正则表达式作为string.split seprator
    docker部分命令
    idea上传项目到GitHub
  • 原文地址:https://www.cnblogs.com/liea/p/11829607.html
Copyright © 2011-2022 走看看