用go语言写一个TCPS的服务程序监听传入的地址、端口有新的client连接后打印client信息并创建个协程来处理client消息如果收到client的消息则打印消息内容如果超过2S收不到client消息则打印接收超时但是不要断开连接
下面是一个使用Go语言编写的TCPS服务程序的示例代码:
package main
import (
"fmt"
"net"
"time"
)
func handleClient(conn net.Conn) {
defer conn.Close()
// 打印客户端信息
fmt.Printf("New client connected: %s\n", conn.RemoteAddr().String())
// 设置读取超时时间为2秒
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
// 创建一个缓冲区来接收客户端的消息
buffer := make([]byte, 1024)
// 循环读取客户端的消息
for {
// 读取客户端消息
n, err := conn.Read(buffer)
if err != nil {
// 判断是否超时
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
fmt.Println("Receive timeout")
return
}
fmt.Printf("Read error: %s\n", err.Error())
return
}
// 打印客户端消息内容
fmt.Printf("Received message from client: %s\n", string(buffer[:n]))
}
}
func main() {
// 监听地址和端口
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Printf("Failed to listen: %s\n", err.Error())
return
}
defer listener.Close()
fmt.Println("TCP server started")
// 接受客户端连接并处理
for {
conn, err := listener.Accept()
if err != nil {
fmt.Printf("Failed to accept connection: %s\n", err.Error())
continue
}
// 创建一个协程来处理客户端消息
go handleClient(conn)
}
}
这个程序会监听地址和端口,当有新的客户端连接时,会打印客户端的信息,并创建一个协程来处理客户端的消息。如果超过2秒没有收到客户端的消息,则会打印接收超时的信息,但不会断开连接
原文地址: http://www.cveoy.top/t/topic/iYRh 著作权归作者所有。请勿转载和采集!