TCP echo server

6

title: TCP echo server
url: tcp-echo-server
date: 2024年06月16日
category: 工具
tags:

  • TCP
  • 工具

TCP echo server

TCP echo server ,客户端发什么,服务端回什么。可用来进行测试。

Golang

package main

import (
    "fmt"
    "log"
    "net"
)

func main() {
    // 指定服务器监听的端口
    port := "19999"
    // 创建TCP地址
    addr := fmt.Sprintf(":%s", port)

    // 监听指定端口
    l, err := net.Listen("tcp", addr)
    if err != nil {
        log.Fatalf("listen error: %v", err)
    }
    defer l.Close()

    log.Printf("Server is running on port %s", port)

    // 无限循环等待客户端连接
    for {
        // 接受连接
        conn, err := l.Accept()
        if err != nil {
            log.Printf("accept error: %v", err)
            continue
        }

        // 处理连接
        go handleConnection(conn)
    }
}

// handleConnection 处理单个客户端连接
func handleConnection(c net.Conn) {
    defer c.Close()

    // 创建一个缓冲区来存储读取的数据
    buffer := make([]byte, 1024)

    // 读取客户端发送的数据
    for {
        n, err := c.Read(buffer)
        if err != nil {
            log.Printf("read error: %v", err)
            break
        }

        // 写入相同的数据到客户端
        _, err = c.Write(buffer[:n])
        if err != nil {
            log.Printf("write error: %v", err)
            break
        }
    }
}

Node.js

// 引入net模块
const net = require('net');

// 创建一个TCP服务器
const server = net.createServer((socket) => {
  console.log('客户端连接上了');

  // 当收到客户端发送的数据时
  socket.on('data', (data) => {
    console.log(`收到客户端的数据: ${data}`);

    // 将收到的数据回发给客户端
    socket.write(data);
  });

  // 当客户端关闭连接时
  socket.on('end', () => {
    console.log('客户端断开连接');
  });

  // 处理错误事件
  socket.on('error', (err) => {
    console.error(`Socket error: ${err.message}`);
  });
});

// 监听端口
const PORT = 12345;
server.listen(PORT, "192.168.2.8", () => {
  console.log(`服务器正在监听端口 ${PORT}`);
});

// 处理服务器错误事件
server.on('error', (err) => {
  console.error(`Server error: ${err.message}`);
});