go实现简单的16进制socket通讯 本文共有1392个字,关键词: 一般对接硬件会用到16制发送 socket 数据包进行通讯。进行软件硬件交互,这里简单写了个测试demo。可以用于硬件对接测试,实际工程中需要对收发流程以及数据存储返回等进行处理才能真正使用。 ``` package main import ( "bufio" "encoding/hex" "fmt" "net" "os" ) func main() { //主动连接服务器192.168.1.100是ip,1160是端口 conn, err := net.Dial("tcp", "192.168.1.100:1160") if err != nil { fmt.Println("socket连接出错 err=", err) return } defer conn.Close() //这里是获取用户输入,比如ff000e0d reader := bufio.NewReader(os.Stdin) for { //从终端读取一行用户输入,并准备发送给服务器 line, err := reader.ReadString('\n') //返回的字符串 if err != nil { fmt.Println("获取输入出错 err=", err) } b, _ := hex.DecodeString(line) // encodedStr := hex.EncodeToString(b) fmt.Printf("\n 发送string:bytes-->%02x \n", b) // fmt.Printf("string-->%s \n", b) //将line发送给服务器 fmt.Print("\n 发出bytes:", []byte(b)) //字符串转化为切片发送 _, err = conn.Write([]byte(b)) if err != nil { fmt.Println("发送数据出错 err=", err) } //接收服务器回复的数据 buf := make([]byte, 2048) //这里只是测试这么写,一直等待数据返回。实际业务要根据具体情况修改。 for { n, err2 := conn.Read(buf) if err2 != nil { fmt.Println("服务器read err=", err2) return } fmt.Print("\n 接收:", buf[:n]) hex_string_data := hex.EncodeToString(buf[:n]) fmt.Print("\n 接收byte转hex", hex_string_data) fmt.Print("\n") break } } } ``` 代码保存为tcpsocket.go 运行 ``` go run tcpsocket.go ``` 在终端下即可以进行交互测试。 × yihong (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 码农心得 2022-09-07 评论 1409 次浏览