这样一个程序:用一个变量来判断服务器是否收到消息!
一个button,点一下发一个消息到服务器.
var
h:integer;
在formCreate里将它设为1//-----表示不可接收在网络控件里去控制它,如果收到服务器发来的消息就改为0//------0表示可接收还是那个button,后面有一段代码去判断这个h的值.问题来了,即使是收到后,返回的值第一次都是1。然后再点一下的话,就正常了。也就是说要点两下才能得到正确的值。我试过延时,但这不是延时的问题。
一个button,点一下发一个消息到服务器.
var
h:integer;
在formCreate里将它设为1//-----表示不可接收在网络控件里去控制它,如果收到服务器发来的消息就改为0//------0表示可接收还是那个button,后面有一段代码去判断这个h的值.问题来了,即使是收到后,返回的值第一次都是1。然后再点一下的话,就正常了。也就是说要点两下才能得到正确的值。我试过延时,但这不是延时的问题。
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;
showMessage(intToStr(Frm_Main.WSocketRec.ReadCount));//-----连上的话结果点一下,为0.再点一下,就正常了
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返回消息确认的结果不能在发消息的时候判断的,没更新呢
Frm_Main.SendMsg(04,['ComputerName'+bb,'IP'+aa+'End','UserID'+dd],ServerIP); //-----发一个消息到服务器验证
后面的话hh:=Frm_Main.WSocketRec.ReadCount;这样也不对大家讨论讨论。
这个问题我很烦,烦了好几天了
对啊?是没有更新?问题在于:我现在发消息到服务器,服务器没有开!
也就是没有返回消息给客户机,当然也不会触发客户机的OnReceive事件了.如果把代码放在那儿的话!不好吧!
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;