如何保持客戶,服務端之間的連線?(100分)

  • 主题发起人 主题发起人 takdick
  • 开始时间 开始时间
T

takdick

Unregistered / Unconfirmed
GUEST, unregistred user!
我寫了兩個程序分別使用clientsocket和serversocket,主要是進行遠程文件管理,上傳下載的功能,現請問有沒有可靠的方法使server端在還沒有收到來自客戶端的disconnect指令,出現不明的錯誤時能自己重新連接客戶端,保持連線?
我已在服務端程序中加入一Timer控件,當連接成功後就開始每隔兩分鍾就向客戶端發送訊息,
try
cs.Socket.SendText('online');
except
cs.Socket.Close;
end;

procedure TForm1.csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
checktimer.enabled:=false; //停止每隔兩分鍾發送訊息的Timer
connecttimer.enabled:=true; //開始另一timer,每隔10秒連接指定地址
end;

procedure TForm1.csError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
socket.Close;
end;

但有時候服務端還是莫名其妙地掉線了,但不是每一次都會出現,也不是在進行同樣的操作時失去連線,
請問有沒有辦法解決此問題?
 
如果通过服务端检测掉线会大幅度占用服务端的资源,建议使用客户端检测是否掉线,你仍然可以使用timer,当然也可以通过事件侦测、线程轮训的方法,只要注意尽可能少的占用资源就可以了。
 
发送类似于PING的命令也应该不会很消耗资源。
 
从硬件上保证是最好的方法
 
請問appfirst:
有什麼事件侦测、线程轮训的方法?能給個例子嗎?
我是在服務端使用Clientsocket主動連接我的客戶端,所以要在服務端檢測是否掉線.
請再指教.
 
多人接受答案了。
 
后退
顶部