之前写了一篇。
发完之后第二天实际应用到游戏之后还是发现了一些小毛病。
比如网络模块有重复使用(多对象)的情况。所以将静态类该成了普通类。
比如安卓下会有些异常出现导致游戏逻辑不正常。所以网络相关的函数有些加了try块。
然后发现写入固定ip的方式根本不适合局域网。于是加了udp做的广播系统,用以服务器和客户端查找ip。
udp广播部分和tcp不一样。因为没有连接,所以socket不需要shutdown。我在这里吃了一亏才知道。
别的没什么修改。贴上修正和扩展之后的代码。
有缘之人自取。唯一要求,如果你发现代码有错,或者有可以提升性能的地方请留言告知。
另:因为这是为局域网设计的,所以网络部分框架以及锁的应用写得很随意,如果需要扩展至千人万人级的承载,请自行修改。
基础类(base)
ClientMsgUnPack.cs 服务器tcp部分用以解包的对象
1 using UnityEngine; 2 /* 3 * 通信协议 4 * 消息头前2字节保存当前消息长度 5 * 后面跟4字节表示消息ID 6 * 再后面是消息实质内容 7 */ 8 9 namespace LanSocket 10 { 11 class ClientMsgUnPack : MsgUnPack 12 { 13 long m_UserID; 14 public ClientMsgUnPack() 15 { 16 m_UserID = -1; 17 } 18 19 public ClientMsgUnPack(byte[] mBuff, ushort len, int userID) 20 { 21 m_UserID = userID; 22 UnPack(mBuff, len); 23 } 24 25 public ClientMsgUnPack(byte[] mBuff, ushort offset, ushort len, int userID) 26 { 27 m_UserID = userID; 28 UnPack(mBuff, offset, len); 29 } 30 31 public long GetUserID() 32 { 33 return m_UserID; 34 } 35 36 public void SetUserID(long userID) 37 { 38 m_UserID = userID; 39 } 40 } 41 }