unit U_ActiveConnections;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;type
TForm1 = class(TForm)
ServerSocket: TServerSocket;
Button1: TButton;
ed_cnt: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket.Active:=true;
end;procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ed_cnt.Text:=inttostr(ServerSocket.Socket.ActiveConnections);
end;procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ed_cnt.Text:=inttostr(ServerSocket.Socket.ActiveConnections);
end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
// 对 socket.ReceiveText 的处理
socket.SendText('ok');
//客户端收到 ok 断开 end;
end.
这个是一个简单的服务端,客户端采用短连接方式传送数据,收到‘ok’后断开连接,再有数据的时候再连接服务端。现在的现象是:当客户端断开连接的时候,ServerSocket.Socket.ActiveConnections的数量偶尔会有减小,大部分时间还是增加,并且服务端所用内存也在增加。这个问题怎么解决?在就是客户端连接上后,服务端所建立的socket对象是不是在客户端断开的时候自动free,如果不是怎么解决这个问题?
谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;type
TForm1 = class(TForm)
ServerSocket: TServerSocket;
Button1: TButton;
ed_cnt: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket.Active:=true;
end;procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ed_cnt.Text:=inttostr(ServerSocket.Socket.ActiveConnections);
end;procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ed_cnt.Text:=inttostr(ServerSocket.Socket.ActiveConnections);
end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
// 对 socket.ReceiveText 的处理
socket.SendText('ok');
//客户端收到 ok 断开 end;
end.
这个是一个简单的服务端,客户端采用短连接方式传送数据,收到‘ok’后断开连接,再有数据的时候再连接服务端。现在的现象是:当客户端断开连接的时候,ServerSocket.Socket.ActiveConnections的数量偶尔会有减小,大部分时间还是增加,并且服务端所用内存也在增加。这个问题怎么解决?在就是客户端连接上后,服务端所建立的socket对象是不是在客户端断开的时候自动free,如果不是怎么解决这个问题?
谢谢!
期待高人指点。分可以再加!!!!
是处理掉出错的,可是有些正断开的socket怎么能处理掉?
这种情况只能通过数据发送或接收数据时才能即时知道,
如果是阻塞方式,通常是通过TRY语句抓住发送或接收数据时抛出的异常,CLOSE掉SOCKET.
如果是非阻塞方式,如你那样,则可以在ONERROR事件中,CLOSE掉SOCKET..使自己单边的SOCKET主动关掉.
这个现象怎么解决?
请赐教,谢谢!