如果服务器关闭后又重新启动,客户端怎样重新链接到服务器? (50分)

  • 主题发起人 主题发起人 wanxu
  • 开始时间 开始时间
W

wanxu

Unregistered / Unconfirmed
GUEST, unregistred user!
一般一个client与server联接上后server.socket的connections会加1,当某个client断开
与服务器的连接后服务器端怎样判别该客户端已经断开?并且server的connections会自动
减1?并且如果服务器关闭后又重新启动,客户端怎样重新链接到服务器?
 
在服务器端的事件onclientdisconnect中
有一个socket参数;
 
eric.youbin:怎么用socket参数????
 
问题1:在ServerSocket1的Disconnect中判断;
从Socket.RemoteHost中可得到用户名;
问题2:
用户断开后当然会减1了,不明白你的意思.
问题3:
服务器关闭后,会激发clientsock1的Disconnect,你在客户端添一个连接按钮Button1,连接时
Button1.enabled:=false;不连时Button1.enabled:=True;
即激发clientsock1的Disconnect时Button1.enabled:=True.
 
doublefishrhy:
你的第一个问题我很满意,
第二个问题是这样:如果我的客户端异常中止,服务器端就不能立即反映出来。
第三个问题:我是想当服务器异常中断后,客户端察觉不出来,但是当服务器重新启动
后,客户端自动连接到服务器! 不好意思,打搅你了!
 
第二个问题:
客户端异常中止会触发ServerSocket1的Error事件:
procedure TfrmMain.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
var
StrMsg:string;
begin
strMsg:=intTostr(ErrorCode);
End;
根据ErrorCode就可知道.
第三个问题和第二个问题类似.
在clientsock1的Error事件中捕获它的ErrorCode.
 
doublefishrhy:
我是这样做的,当服务器端发生异常,会触发客户端的ONERRORCODE事件,我在这个事件
里面加了代码让时间控件的enabled为true;在时间控件里面我加入了如下代码:
procedure Tclient_pc.Timer2Timer(Sender: TObject);
var
cn: array[0..127] of Char;
sz: dword;

begin
client_client.Active:=true;
sz:= SizeOf(cn);
GetComputerName(cn, sz);
M_send.Lines.Clear;
M_send.Lines.Add(cn);
M_send.Lines.Add(' ');
client_client.Socket.SendText(M_send.Lines.text);
end;
//就是不停的让客户端的socket的active为true,并且发送数据到服务器端.如果链接
//成功就让时间控件的enabled为false;但是就是怎么也连不到服务器上面! 请指教..
//我需要当服务器异常断开后,客户端不断尝试链接到服务器..一当服务器启动,客户端
//就能正常连接到服务器,让用户根本就察觉不出来....
 
自己做个消息队列
 
關注中,我也要做一個這樣的程序!
 
还有高手指点吗?
 
是否要先断开一下?
 
我已经断开了!
 
接受答案了.
 
后退
顶部