PasSimpleSockets
1.0.0
Simple Socket API wrapper สำหรับ freepascal ให้การเข้าถึงซ็อกเก็ต API ในแบบ C-ish น้อยกว่า
ให้ฟังก์ชั่นพื้นฐานของ Berkley Socket API ในลักษณะที่ทันสมัยกว่า นอกจากนี้ยังจัดการการแปลง IP-address อย่างโปร่งใสและสแต็กคู่ IPv6/IPv4
ฟังก์ชั่น (สัญกรณ์ Delphi):
function TCPSocket (AType: TSocketType): TSocket;
function UDPSocket (AType: TSocketType): TSocket;
procedure CloseSocket ( const ASocket: TSocket);
procedure Bind ( const ASocket: TSocket; const AAddress: TNetworkAddress; APort: Word);
procedure Listen ( const ASocket: TSocket; Backlog: Integer);
function AcceptConnection ( const ASocket: TSocket): TSocketConnection;
procedure Connect ( const ASocket: TSocket; const AAddress: TNetworkAddress; APort: Word);
function Receive ( const ASocket: TSocket; ABuffer: Pointer; MaxSize: SizeInt; AFlags: Integer = 0 ): SizeInt;
function ReceiveFrom ( const ASocket: TSocket; ABuffer: Pointer; MaxSize: SizeInt; AFlags: Integer = 0 ): TReceiveFromResult;
function Send ( const ASocket: TSocket; ABuffer: Pointer; ASize: SizeInt; AFlags: Integer = 0 ): SizeInt;
function SendTo ( const ASocket: TSocket; const ReceiverAddr: TNetworkAddress;
ReceiverPort: Word; ABuffer: Pointer; ASize: SizeInt; AFlags: Integer = 0 ): SizeInt;
function ReceiveStr ( const ASocket: TSocket; MaxLength: SizeInt; AFlags: Integer = 0 ): String;
function ReceiveStrFrom ( const ASocket: TSocket; MaxLength: SizeInt = MaxUDPPackageSize; AFlags: Integer = 0 ): TReceiveFromStringMessage;
function SendStr ( const ASocket: TSocket; const AData: String; AFlags: Integer = 0 ): SizeInt;
function SendStrTo ( const ASocket: TSocket; const ReceiverAddr: TNetworkAddress; ReceiverPort: Word; const AData: String; AFlags: Integer = 0 ): SizeInt;
function Receive <T>( const ASocket: TSocket; AFlags: Integer = 0 ): T;
function ReceiveFrom <T>( const ASocket: TSocket; AFlags: Integer = 0 ): TReceiveFromMessage<T>;
function Send <T>( const ASocket: TSocket; constref AData: T; AFlags: Integer = 0 ): SizeInt;
function SendTo <T>( const ASocket: TSocket; constref ReceiverAddr: TNetworkAddress; ReceiverPort: Word; const AData: T; AFlags: Integer = 0 ): SizeInt;
function ReceiveArray <T>( const ASocket: TSocket; MaxCount: SizeInt; AFlags: Integer = 0 ): TArray<T>;
function ReceiveArrayFrom <T>( const ASocket: TSocket; MaxCount: SizeInt; AFlags: Integer = 0 ): TReceiveFromMessage<TArray<T>>;
function SendArray <T>( const ASocket: TSocket; const AData: TArray<T>; AFlags: Integer = 0 ): SizeInt;
function SendArrayTo <T>( const ASocket: TSocket; const ReceiverAddr: TNetworkAddress; ReceiverPort: Word; const AData: TArray<T>; AFlags: Integer = 0 ): SizeInt;
// Timeout in MS
function DataAvailable ( const SocketArray: TSocketArray; TimeOut: Integer = 0 ): TSocketArray;
function DataAvailable ( const ASocket: TSocket; TimeOut: Integer = 0 ): Boolean;
function DataAvailable ( const SocketArray: array of TSocket; TimeOut: Integer = 0 ): TSocketArray; program example;
{ $mode objfpc }{ $H+ }
uses
SimpleSockets;
var
Sock: TSocket;
Msg: TUDPStringMessage;
begin
Sock := UDPSocket(stDualStack);
try
Bind(Sock, ' 127.0.0.1 ' , 1337 );
// Simple echo server: Receive message and answer with same message
Msg := ReceiveStrFrom(Sock);
WriteLn( ' Received from Client at ' , Msg.FromAddr.Address, ' : ' , Msg.FromPort, ' message: ' , Msg.Data);
SendStrTo(Sock, Msg.FromAddr, Msg.FromPort, Msg.Data);
finally
CloseSocket(Sock);
end ;
ReadLn;
end . ซ็อกเก็ตที่สร้างขึ้นด้วยประเภท stDualStack จะรองรับทั้งการเชื่อมต่อ IPv4 และ IPv6 wrapper จะจัดการกับสิ่งนี้อย่างโปร่งใสและจะแปลงที่อยู่ IPv4 ที่แมป IPv6 เป็นสัญลักษณ์ IPv4 ทั่วไป