go 实现tcp服务端,处理十六进制字符串

要实现一个Go语言的TCP服务端,处理客户端发送的十六进制字符串数据,可以遵循以下步骤:

1. 导入所需包

 

go

import (
    "encoding/hex"
    "fmt"
    "net"
    "log"
)

除了之前所需的netfmtlog包之外,这里还导入了encoding/hex包,用于处理十六进制编码与解码。

2. 监听端口

与普通TCP服务端相同,创建监听器并绑定端口:

 

go

listenAddr := ":8080" // 监听所有可用网络接口上的8080端口
listener, err := net.Listen("tcp", listenAddr)
if err != nil {
    log.Fatal("Failed to listen:", err)
}
defer listener.Close()

fmt.Println("TCP server listening on", listenAddr)

3. 接受连接

同样在无限循环中接受客户端连接,并使用goroutine处理:

 

go

for {
    conn, err := listener.Accept()
    if err != nil {
        log.Println("Error accepting connection:", err)
        continue
    }

    go handleConnection(conn)
}

4. 处理连接

定义handleConnection()函数,处理每个客户端连接并解析十六进制字符串:

 

go

func handleConnection(conn net.Conn) {
    defer conn.Close()

    fmt.Printf("Accepted connection from %s\n", conn.RemoteAddr())

    // 读取客户端发送的十六进制字符串
    reader := bufio.NewReader(conn)
    hexString, err := reader.ReadString('\n')
    if err != nil {
        log.Println("Error reading from client:", err)
        return
    }
    hexString = strings.TrimSpace(hexString) // 去除末尾换行符

    // 解析十六进制字符串为字节切片
    bytes, err := hex.DecodeString(hexString)
    if err != nil {
        log.Printf("Invalid hexadecimal string received: %s\n", err)
        _, _ = conn.Write([]byte("Error: Invalid hexadecimal input.\n"))
        return
    }

    // 对字节切片进行处理(此处仅为示例,实际应用中应替换为实际业务逻辑)
    fmt.Printf("Received and decoded %d bytes: %v\n", len(bytes), bytes)

    // 示例回复:将字节切片转换回十六进制字符串并发送给客户端
    hexReply := hex.EncodeToString(bytes)
    _, err = conn.Write([]byte(hexReply + "\n"))
    if err != nil {
        log.Println("Error writing to client:", err)
    }
}

在这个示例中,服务端接收客户端发送的十六进制字符串,使用hex.DecodeString()将其解码为字节切片,然后进行业务处理(此处仅为打印)。最后,将处理后的字节切片重新编码为十六进制字符串并回传给客户端。实际应用中,应根据业务需求替换处理字节切片的部分逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值