我的程序是客户端 服务端通过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;