unity网络通信模块的使用

上一篇分享了一个unity的网络通信模块,这篇来将一下使用方法

完整的项目源码在这里:https://github.com/LiuFeng1011/UnityNetWork


1.创建协议类NetProtocols

客户端与服务器需要提前约定好通信协议以及每个协议的数据。

所有的客户端与服务器通信的协议定义在此类里。这里先定义一个TEST协议。

public class NetProtocols    
{
	//心跳
	public const int HEART = 0x00000000;

	//test
	public const int TEST = 0x0FFFFFFF;

}
2.创建请求和响应

请求和响应用来序列化和反序列化数据,这些数据需要客户端和服务器约定好,所有的序列化和反序列化操作客户端和服务器都必须一致。请求为客户端发送给服务器的数据,响应为服务器发送给客户端的数据。同一个协议不一定必须存在请求和响应,比如有一些消息,客户端只是单纯的通知服务器一下,不需要任何返回数据,这样的协议则不需要响应类,同样,有些内容需要服务器主动下发给客户端,这样的协议则不需要定义请求类。

创建请求类TestReq:

首先所有的请求类需要继承Request,然后定义2个测试参数,并在构造函数中赋值。

然后重写GetProtocol以及Serialize方法,Serialize方法中对需要的数据进行序列化,服务器端按照一样的顺序进行反序列化

public class TestReq : Request {
    public int testInt;
    public string testString;

    public TestReq(int testInt,string testString){
        this.testInt = testInt;
        this.testString = testString;
    }

    public override int GetProtocol()
    {
        return NetProtocols.TEST;
    }

    public override void Serialize(DataStream writer)
    {
        base.Serialize(writer);

        writer.WriteSInt32(testInt);
        writer.WriteString16(testString);
    }
}
创建响应类TestResp
首先响应类需要继承Resp,同样定义一个测试数据,并且重写GetProtocol以及Deserialize方法, Deserialize方法中对数据进行反序列化,同样需要和服务器的序列化顺序保持一致。
public class TestResp : Resp {
    public string data;

    public override int GetProtocol()
    {
        return NetProtocols.TEST;
    }

    public override void Deserialize(DataStream reader)
    {
        base.Deserialize(reader);
        data = reader.ReadString16();
    }
}

3.注册协议

为了在接收到服务器数据时能够找到相应的响应类,需要在ProtoManager中进行注册。所以我们创建一个类用来注册所有项目中的响应类:

public class RegisterResp  {
	//所有response必须要在这里注册
	public static void RegisterAll(){
         ProtoManager.Instance.AddProtocol<TestResp>(NetProtocols.TEST);
	}
}


这样添加协议的步骤就基本完成了,接下来讲一下如何使用。

1.首先添加代理用来接收响应消息,所有想要接收的协议都需要添加上。

void Awake()
{
        ProtoManager.Instance.AddRespDelegate(NetProtocols.TEST,Response);
}
2.在物件销毁时删除代理

void OnDisable()
{
        ProtoManager.Instance.DelRespDelegate(NetProtocols.TEST,Response);
}
3.连接服务器

SocketHelper.GetInstance().Connect("IP",1,ConnectCallBack,null);
4.发送请求

TestReq req = new TestReq(1, "2");
req.Send();
5.接收请求
void Response(Resp r){
        TestResp resp = (TestResp)r;

        Debug.Log(resp.data);
}
到此,我们的unity客户端就可以正常和服务器收发消息啦。





  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值