使用 hpSocket 写程序分服务端和客户端,服务端收到客户端的一个消息,服务端会响应多个信息给客户端,但客户端只收到部分信息,收到的包都是完整的。
服务端断点时,一个一个看客户端又能收到,关闭断点有低概率收到完整,大概率又收不完全。
其实循环里面只用发一次,调试故意发 5 次,至少收到 1 次,但没试过 5 次都全收到,除非卡着断点一个一个 Send 走。
// 创建其他玩家 foreach (var model in DALManager.Instance.UserDal.GetAllUserModel()) { Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); } 封装的 Send 方法;
public static void Send(IntPtr connid, byte type, int command, params object[] content) { Message message = new Message(type, command, content); byte[] bytes = Message.ToBytes(message); server.Send(connid, bytes, bytes.Length); } hp-socket 的代码了;
public bool Send(IntPtr connId, byte[] bytes, int length) { GCHandle gcHandle = GCHandle.Alloc((object) bytes, GCHandleType.Pinned); bool flag = HPSocket.Sdk.Server.HP_Server_Send(this.SenderPtr, connId, gcHandle.AddrOfPinnedObject(), length); this.SysErrorCode.Value = flag ? 0 : Sys.SYS_GetLastError(); gcHandle.Free(); return flag; } 似乎连续总是会丢失后面的,有大佬知道问题在哪吗?
