我用的是ServerSocket,底层有一些板子做为客户端,客户端每5秒发送一次连接信息,服务端收到则证明连接正常,否则马上关闭这个连接,报警。
现在发现客户端断开之后(突然断电或者板子重启)服务端相应的socket资源并没有释放,而是过了大概3、4分钟的样子才释放掉,怎样能够马上释放资源呢?
我参考的是网上的代码,如下:
......
procedure TForm1.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var 
i,j:integer; 
begin 
  j:=-1;
  for i:=0 to sessions do
  begin
  //在原有的客户端连接数组中有中断的客户端连接
    if not session[i].CUsed then
    begin
      session[i].CHandle := Socket.SocketHandle ;//客户端套接字句柄
      session[i].CSocket := Socket; //客户端套接字
      //session[i].CName := Socket.RemoteHost ; //客户端计算机名称
      session[i].CAddress := Socket.RemoteAddress ;//客户端计算机IP
      session[i].CUsed := True; //连接数组当前位置已经占用
      Break;
    end;
    j:=i;
  end;
  if j=sessions then
  begin
    inc(sessions);
    session[j].CHandle := Socket.SocketHandle ;
    session[j].CSocket := Socket;
    //session[j].CName := Socket.RemoteHost ;
    session[j].CAddress := Socket.RemoteAddress ;
    session[j].CUsed := True;
  end;
Memo1.Lines.Add('客户端 '+Socket.RemoteAddress + ' 连接');
end;
......
其实就是怎么样释放session[j].CSocket 这个连接的资源