1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package main
- import (
- "flag"
- "fmt"
- "net"
- )
- var flagHelp bool
- var flagEcho bool
- func main() {
- flag.BoolVar(&flagHelp, "h", false, "print help")
- flag.BoolVar(&flagEcho, "e", false, "echo (send back what received)")
- flag.Parse()
- if flagHelp {
- flag.PrintDefaults()
- return
- }
- ln, err := net.Listen("tcp", ":12450")
- if err != nil {
- fmt.Println("Error listening:", err.Error())
- return
- }
- defer ln.Close()
- fmt.Println("Listening on :12450")
- for {
- // 接受连接
- conn, err := ln.Accept()
- if err != nil {
- fmt.Println("Error accepting connection:", err.Error())
- return
- }
- fmt.Println("Client connected:", conn.RemoteAddr())
- // 在新的goroutine中处理连接
- go handleConnection(conn)
- }
- }
- func handleConnection(conn net.Conn) {
- defer conn.Close()
- // 循环读取数据并回显
- for {
- buf := make([]byte, 1024)
- // 读取数据
- n, err := conn.Read(buf)
- if err != nil {
- fmt.Println("Error reading:", err.Error())
- return
- }
- // 打印接收到的数据
- fmt.Println("Received:\n", string(buf[:n]))
- // 发送回去
- if flagEcho {
- _, err = conn.Write(buf[:n])
- if err != nil {
- fmt.Println("Error writing:", err.Error())
- return
- }
- }
- }
- }
|