package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"time"
)

func handleConnection(conn net.Conn) {
	defer conn.Close()
	
	// 客户端地址信息
	remoteAddr := conn.RemoteAddr().String()
	fmt.Printf("客户端 %s 已连接\n", remoteAddr)
	
	// 设置连接超时
	conn.SetReadDeadline(time.Now().Add(time.Hour * 24)) // 24小时超时，可以根据需要调整
	
	buffer := make([]byte, 1024)
	for {
		// 读取客户端发送的数据
		n, err := conn.Read(buffer)
		
		if err != nil {
			if err == io.EOF {
				fmt.Printf("客户端 %s 已断开连接\n", remoteAddr)
			} else {
				fmt.Printf("从客户端 %s 读取数据时出错: %v\n", remoteAddr, err)
			}
			break
		}
		
		// 在终端显示接收到的数据
		receivedData := buffer[:n]
		fmt.Printf("从 %s 接收到数据: %s\n", remoteAddr, string(receivedData))
		
		// 可选：回复客户端确认消息
		// conn.Write([]byte("服务器已收到消息"))
	}
}

func main() {
	// 监听端口
	port := ":10002"
	listener, err := net.Listen("tcp", port)
	if err != nil {
		log.Fatalf("无法监听端口 %s: %v", port, err)
	}
	defer listener.Close()
	
	fmt.Printf("TCP服务器已启动，正在监听端口 %s\n", port)
	
	// 接受连接并处理
	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Printf("接受连接失败: %v\n", err)
			continue
		}
		
		// 为每个连接创建一个goroutine
		go handleConnection(conn)
	}
}
