TCP echo server
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}`);
});