ASyncSocket
About this
ASyncSocket is Delphi's socket component based on Winsock2.
Common property of this as follows :
- Winsock2 based
- IPv6 Support
- Asynchronous TCP Server and Client
- UnicodeString support (Delphi 2009 or abobe)
- TextBase send/receive interface is available
Download
Download (CodeCentral)
Example
Simple echo server and HTTP client.
unit ASyncSocketExample;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ASyncSocket, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
ASyncTCPClient1: TASyncTCPClient;
ASyncTCPServer1: TASyncTCPServer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ASyncTCPClient1Connect(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPClient1Disconnect(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPClient1Read(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPServer1Connect(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPServer1Disconnect(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPServer1Read(Sender: TObject; Socket: Cardinal);
procedure ASyncTCPServer1Error(Sender: TObject; Socket: Cardinal;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ASyncTCPClient1Error(Sender: TObject; Socket: Cardinal;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ASyncTCPClient1TryToConnect(Sender: TObject;
DestinationHost: string; DestinationPort: Integer);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ASyncTCPClient1Connect(Sender: TObject; Socket: Cardinal);
begin
ListBox1.Items.Add('ClientModeConnect : Connection Established '+ASyncTCPClient1.GetRemoteAddress());
ASyncTCPClient1.WriteString('GET /robots.txt'#13#10);
end;
procedure TForm1.ASyncTCPClient1Disconnect(Sender: TObject; Socket: Cardinal);
begin
ListBox1.Items.Add('ClientModeDisonnect : ClosingLink');
end;
procedure TForm1.ASyncTCPClient1Error(Sender: TObject; Socket: Cardinal;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if (ErrorCode=10060) then
begin
ListBox1.Items.Add('ClientModeError - Connection timed out');
ErrorCode:=0;
end;
if (ErrorCode=10061) then
begin
ListBox1.Items.Add('ClientModeError - Connection refused');
ErrorCode:=0;
end;
if (ErrorCode=11001) then
begin
ListBox1.Items.Add('ClientModeError - Host not found');
ErrorCode:=0;
end;
if (ErrorCode=10053) then
begin
ListBox1.Items.Add('ClientModeError - Software caused connection abort : '+ASyncTCPServer1.GetRemoteAddress(socket)+ASyncTCPServer1.GetRemoteHost(socket));
ErrorCode:=0;
end;
if (ErrorCode=10054) then
begin
ListBox1.Items.Add('ClientModeError - Connection reset by peer : '+ASyncTCPServer1.GetRemoteAddress(socket));
ErrorCode:=0;
end;
end;
procedure TForm1.ASyncTCPClient1Read(Sender: TObject; Socket: Cardinal);
begin
ListBox1.Items.Add('ClientModeRead : '+UnicodeString(ASyncTCPClient1.ReadString));
end;
procedure TForm1.ASyncTCPClient1TryToConnect(Sender: TObject;
DestinationHost: string; DestinationPort: Integer);
begin
ListBox1.Items.Add('ClientModeConnect : Try to connect '+DestinationHost);
end;
procedure TForm1.ASyncTCPServer1Connect(Sender: TObject; Socket: Cardinal);
begin
caption:='Active Connection : '+IntToStr(ASyncTCPServer1.Connections.Count);
ListBox1.Items.Add('Connect : '+ASyncTCPServer1.GetRemoteAddress(socket));
end;
procedure TForm1.ASyncTCPServer1Disconnect(Sender: TObject; Socket: Cardinal);
begin
caption:='Active Connection : '+IntToStr(ASyncTCPServer1.Connections.Count-1);
ListBox1.Items.Add('Disonnect : '+ASyncTCPServer1.GetRemoteAddress(socket));
end;
procedure TForm1.ASyncTCPServer1Error(Sender: TObject; Socket: Cardinal;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if (ErrorCode=10053) then
begin
caption:='Active Connection : '+IntToStr(ASyncTCPServer1.Connections.Count-1);
ListBox1.Items.Add('Error - Software caused connection abort : '+ASyncTCPServer1.GetRemoteAddress(socket)+ASyncTCPServer1.GetRemoteHost(socket));
ErrorCode:=0;
end;
if (ErrorCode=10054) then
begin
caption:='Active Connection : '+IntToStr(ASyncTCPServer1.Connections.Count-1);
ListBox1.Items.Add('Error - Connection reset by peer : '+ASyncTCPServer1.GetRemoteAddress(socket));
ErrorCode:=0;
end;
end;
procedure TForm1.ASyncTCPServer1Read(Sender: TObject; Socket: Cardinal);
begin
ASyncTCPServer1.WriteString(socket,ASyncTCPServer1.ReadString(socket));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ASyncTCPServer1.Active:=false;
ASyncTCPClient1.Active:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (ASyncTCPServer1.Connections.Count>0) then
ASyncTCPServer1.Disconnect(ASyncTCPServer1.Connections[0]);
ASyncTCPClient1.Active:=not ASyncTCPClient1.Active;
end;
end.
|
|