首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

ClientSocket的重新连接有关问题

2012-04-18 
ClientSocket的重新连接问题程序中使用了ClientSocket控件,用来和服务端进行连接。主程序在程序初始化时赋

ClientSocket的重新连接问题
程序中使用了ClientSocket控件,用来和服务端进行连接。主程序在程序初始化时赋给ClientSocket的属性host和port,然后建立连接。连接建立完成后,建立线程,线程中使用ClientSocket进行数据的收取和发送。如果在程序运行时发生断网,希望程序能自己尝试恢复连接。但是一直没有测试成功。现在将代码贴出来,请高手指正。
procedure   TIntfaceServer.Execute;
var
        sBuf:   String;
        SendText:   String;
begin
    {   Place   thread   code   here   }
          FreeOnTerminate:=True   ;
          SendText:= '*W11 '   +   frmMain.ManageDepID   +   '| '   +   frmMain.RegisterCode   +   '^ ';
          AddString(SendText);
        while   not   Terminated   do
        begin
                try
                        while   not   ClientSocket.Active   do
                        begin
                                ClientSocket.Active   :=True;
                                Sleep(100);
                        end;
                        if   ClientSocket.Active   then
                        begin
                                while(ClientSocket.Socket.ReceiveLength=0)   do
                                begin
                                        sleep(100);
                                end;
                                sBuf:=ClientSocket.Socket.ReceiveText;
                                fInfo:=sBuf;
                                WriteLog(2,fInfo);
                                if   (fInfo <> ' ')   then
                                begin
                                        DisposeInfo;
                                end;
                        end;
                except   on   e:exception   do
                        WriteLog(3,e.Message);


                end;
        end;
end;

[解决办法]
改成这样试试:
procedure TIntfaceServer.Execute; 
var 
sBuf : String; 
SendText: String; 
begin 
FreeOnTerminate:=True; 
SendText:= "*W11 " + frmMain.ManageDepID + " | " + frmMain.RegisterCode + "^ ";
AddString(SendText); 
while not Terminated do 
begin 
try 
while ClientSocket.Active and (ClientSocket.Socket.ReceiveLength=0) do 
begin
sleep(100);
end;
if ClientSocket.Active then
begin
sBuf:=ClientSocket.Socket.ReceiveText; 
fInfo:=sBuf; 
WriteLog(2,fInfo); 
if fInfo < > " " then 
begin 
DisposeInfo; 
end; 
end
else begin
while not ClientSocket.Active do 
begin 
ClientSocket.Open; 
Sleep(100); 
end; 
end;
except on e:exception do 
WriteLog(3,e.Message); 
end; 
end; 
end;

热点排行