使用golang进行socket编程,还是挺方便,我参考了一些网上文章和阅读了一些开源代码,也跟着学习如何进行golang的socket编程,这里只编写简单的服务端、客户端,抛砖引玉。
首先定义通讯协议,我使用protobuf,如何安装protobuf?可以参考我之前的文章:
https://mp.csdn.net/postedit/81983072
- 准备工作
定义协议,首先需要编写protobuf的协议文件:
syntax = "proto3";
package protocol;
message EchoMsg {
uint32 cmd = 1;
uint64 UID = 2;
string msg = 3;
}
然后使用protoc命令编译为go代码:
protoc ./* --go_out=./
另外,在发送字节流的时候,我在EchoMsg之前,加上了2个字节的长度字段,表示整个数据包的长度,这里还进行了大小端的处理,后面代码会体现。
- 服务端编码
服务端开启侦听后,则进入for循环来等待客户端连接,如有客户端连接,则启动一个goroutine来处理该连接的业务逻辑。在从socket对象读取数据时,首先读取2个字节的长度字段,然后再根据长度读取剩余的字节,把数据读出来后,使用protobuf解码。完整代码如下:
package main
import (
"alwaysgo/sockettest/server/protocol"
"encoding/binary"
"encoding/json"
"io"
"net"
"github.com/golang/protobuf/proto"