PasSimpleSockets
1.0.0
Простая обертка API с сокетом для Freepascal. Обеспечивает доступ к API сокета менее C-ish.
Обеспечивает базовую функциональность API Berkley Socket API более современным образом. Также прозрачно обрабатывает преобразование IP-адреса и двойной стек IPv6/IPv4.
Функции (Delphi Notation):
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. Обертка будет прозрачно обрабатывать это и будет преобразовать отображенные адреса IPv6 в общую нотацию IPv4