使用 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;
}
似乎连续总是会丢失后面的,有大佬知道问题在哪吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.