一个用golang编写的TCP服务端、客户端使用例子

使用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"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值