我的程序是客户端 服务端通过socket给我发送消息 当服务端给我发送一个包过来的时候,没问题,收到正确的包 但是当服务端连续不断的给我发送3个以上包的时候,我就只能收到前两个包 后面的就不见了!!单步跟踪的时候 发现我根本就没有收到后面的包 也就是说没有东西来触发clientsocketread时间了 代码如下:
procedure Tfrm_main.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
leo_Head: TAgent_MSG_Head;
leo_Deliver : TDelivery;
leo_Submit_Rsp : TSubmit_Rsp;
leo_Msg_Report : TAgent_Msg_Report;
ThreadHead :PThreadHead;
receive_Command_ID : Longword;
begin
// leo 分析包头
// leo 通过command_id 判断是什么命令 Socket.ReceiveBuf(leo_Head,sizeof( TAgent_MSG_Head ) ); // 收包头 receive_Command_ID := ntohl( leo_Head.dwCommand_ID ); // 得到命令类型 if receive_Command_ID = AGENT_DELIVERY then
begin
FillChar(leo_Deliver, SizeOf(leo_Deliver), 0); // 清零
p_Msg.Caption := format('normal MO %s',[IntToStr(receive_Command_ID)]); Socket.ReceiveBuf( leo_Deliver.sDeliver_Msg, sizeof( TDeliver_body )); // 收包体 leo_Deliver.sHead := leo_Head; // 将包头、包体组合到一起 //返回recv_comfirm消息
forRecv_Confirm( AGENT_RECV_CONFIRM, leo_Head.dwSequence_ID , 2 );
FillChar(leo_Head, sizeof(leo_Head), 0); // 把leo_head清零
// 转到业务处理流程
New(ThreadHead); ThreadHead^.Sender := leo_Deliver.sDeliver_Msg.src_TermID;
ThreadHead^.Sendto := leo_Deliver.sDeliver_Msg.Dest_TermID;
ThreadHead^.register_flag := 0; // 1 表示是注册、注销信息
ThreadHead^.Msg := leo_Deliver.sDeliver_Msg.Msg_Content; GameUserLink.Add(ThreadHead); FillChar(leo_Deliver, sizeof(TDelivery), 0); end;
procedure Tfrm_main.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
leo_Head: TAgent_MSG_Head;
leo_Deliver : TDelivery;
leo_Submit_Rsp : TSubmit_Rsp;
leo_Msg_Report : TAgent_Msg_Report;
ThreadHead :PThreadHead;
receive_Command_ID : Longword;
begin
// leo 分析包头
// leo 通过command_id 判断是什么命令 Socket.ReceiveBuf(leo_Head,sizeof( TAgent_MSG_Head ) ); // 收包头 receive_Command_ID := ntohl( leo_Head.dwCommand_ID ); // 得到命令类型 if receive_Command_ID = AGENT_DELIVERY then
begin
FillChar(leo_Deliver, SizeOf(leo_Deliver), 0); // 清零
p_Msg.Caption := format('normal MO %s',[IntToStr(receive_Command_ID)]); Socket.ReceiveBuf( leo_Deliver.sDeliver_Msg, sizeof( TDeliver_body )); // 收包体 leo_Deliver.sHead := leo_Head; // 将包头、包体组合到一起 //返回recv_comfirm消息
forRecv_Confirm( AGENT_RECV_CONFIRM, leo_Head.dwSequence_ID , 2 );
FillChar(leo_Head, sizeof(leo_Head), 0); // 把leo_head清零
// 转到业务处理流程
New(ThreadHead); ThreadHead^.Sender := leo_Deliver.sDeliver_Msg.src_TermID;
ThreadHead^.Sendto := leo_Deliver.sDeliver_Msg.Dest_TermID;
ThreadHead^.register_flag := 0; // 1 表示是注册、注销信息
ThreadHead^.Msg := leo_Deliver.sDeliver_Msg.Msg_Content; GameUserLink.Add(ThreadHead); FillChar(leo_Deliver, sizeof(TDelivery), 0); end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货