这样一个程序:用一个变量来判断服务器是否收到消息!
一个button,点一下发一个消息到服务器.
var
  h:integer;
在formCreate里将它设为1//-----表示不可接收在网络控件里去控制它,如果收到服务器发来的消息就改为0//------0表示可接收还是那个button,后面有一段代码去判断这个h的值.问题来了,即使是收到后,返回的值第一次都是1。然后再点一下的话,就正常了。也就是说要点两下才能得到正确的值。我试过延时,但这不是延时的问题。

解决方案 »

  1.   

    if Length(Trim(E_Code.Text))>5 then
        begin
             aa:=GetIP;      //----取得机子的IP;
              bb:=iptoname(aa);//----取得计算机名;
              dd:=Trim(e_Code.Text);//-----  用户的ID
             Frm_Main.SendMsg(04,['ComputerName'+bb,'IP'+aa+'End','UserID'+dd],ServerIP); //-----发一个消息到服务器验证
               if hh=0 then
               begin
                 Application.MessageBox('没有连上服务,请检查服务器状态!','强者教育VOD_客户端',mb_IconQUestion+mb_ok);
                 e_Code.SelectAll;
                 Exit;
               end else
               begin
                 E_Pass.SelectAll;
               end;
             
      

  2.   

    if hh=0 then//----在这儿去检查有没有收到消息.如果连上了,hh的值还是零.我另外用了一个button
    showMessage(intToStr(Frm_Main.WSocketRec.ReadCount));//-----连上的话结果点一下,为0.再点一下,就正常了
      

  3.   

    if hh=0 then
               begin
                 Application.MessageBox('没有连上服务,请检查服务器状态!','强者教育VOD_客户端',mb_IconQUestion+mb_ok);
                 e_Code.SelectAll;
                 Exit;
               end else
               begin
                 E_Pass.SelectAll;
               end;
    这段代码应该放到接受事件中OnReceive,你第二次点击button的时候,hh显示的才是第一次的改变后的值,也就是说A发送消息给 B,B返回消息确认的结果不能在发消息的时候判断的,没更新呢
      

  4.   

    忘了,但这是一个关键!如果放在
    Frm_Main.SendMsg(04,['ComputerName'+bb,'IP'+aa+'End','UserID'+dd],ServerIP); //-----发一个消息到服务器验证
               
    后面的话hh:=Frm_Main.WSocketRec.ReadCount;这样也不对大家讨论讨论。
    这个问题我很烦,烦了好几天了
      

  5.   

    to : u2m(痛并快乐着) 
       对啊?是没有更新?问题在于:我现在发消息到服务器,服务器没有开!
    也就是没有返回消息给客户机,当然也不会触发客户机的OnReceive事件了.如果把代码放在那儿的话!不好吧!
      

  6.   

    我放在edit的onExit事件里去执行,也不行!Receive事件还在后面执行,这样肯定不会变?大家看看,怎么在它之后来判断!
      

  7.   

    procedure TForm1.button1click(...);
    var
      t: Cardinal;
    begin
      h := 1;
      button1.enabled := false;  //send message here  t := GetTickCount+1000; // 1000 = 1秒
      while (GetTickCount < t) and (h = 1) do
        Application.ProcessMessages;  if h = 1 then
        ShowMessage('No reply!')
      else
        ShowMessage('Reply ok!');  button1.Enabled := True;
    end;