⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winsock2.pas

📁 适用于网络监控,视频聊天,网络VOD等多媒体数据流的网络传输与回放.控件包目前包括三个控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
function WSALookupServiceBeginW(var qsRestrictions: TWSAQuerySetW; const
  dwControlFlags: DWORD; var hLookup: THANDLE): Integer; stdcall;
function WSALookupServiceBegin(var qsRestrictions: TWSAQuerySet; const
  dwControlFlags: DWORD; var hLookup: THANDLE): Integer; stdcall;

function WSALookupServiceNextA(const hLookup: THandle; const dwControlFlags:
  DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySetA): Integer; stdcall;
function WSALookupServiceNextW(const hLookup: THandle; const dwControlFlags:
  DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySetW): Integer; stdcall;
function WSALookupServiceNext(const hLookup: THandle; const dwControlFlags:
  DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySet): Integer; stdcall;

function WSALookupServiceEnd(const hLookup: THandle): Integer; stdcall;

function WSAInstallServiceClassA(const lpServiceClassInfo:
  LPWSAServiceClassInfoA): Integer; stdcall;
function WSAInstallServiceClassW(const lpServiceClassInfo:
  LPWSAServiceClassInfoW): Integer; stdcall;
function WSAInstallServiceClass(const lpServiceClassInfo:
  LPWSAServiceClassInfo): Integer; stdcall;

function WSARemoveServiceClass(const lpServiceClassId: PGUID): Integer; stdcall;

function WSAGetServiceClassInfoA(const lpProviderId: PGUID; const
  lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
  lpServiceClassInfo: LPWSAServiceClassInfoA): Integer; stdcall;
function WSAGetServiceClassInfoW(const lpProviderId: PGUID; const
  lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
  lpServiceClassInfo: LPWSAServiceClassInfoW): Integer; stdcall;
function WSAGetServiceClassInfo(const lpProviderId: PGUID; const
  lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
  lpServiceClassInfo: LPWSAServiceClassInfo): Integer; stdcall;

function WSAEnumNameSpaceProvidersA(var lpdwBufferLength: DWORD; const
  lpnspBuffer: LPWSANameSpace_InfoA): Integer; stdcall;
function WSAEnumNameSpaceProvidersW(var lpdwBufferLength: DWORD; const
  lpnspBuffer: LPWSANameSpace_InfoW): Integer; stdcall;
function WSAEnumNameSpaceProviders(var lpdwBufferLength: DWORD; const
  lpnspBuffer: LPWSANameSpace_Info): Integer; stdcall;

function WSAGetServiceClassNameByClassIdA(const lpServiceClassId: PGUID;
  lpszServiceClassName: PChar;
  var lpdwBufferLength: DWORD): Integer; stdcall;
function WSAGetServiceClassNameByClassIdW(const lpServiceClassId: PGUID;
  lpszServiceClassName: PWideChar;
  var lpdwBufferLength: DWORD): Integer; stdcall;
function WSAGetServiceClassNameByClassId(const lpServiceClassId: PGUID;
  lpszServiceClassName: PMBChar;
  var lpdwBufferLength: DWORD): Integer; stdcall;

function WSASetServiceA(const lpqsRegInfo: LPWSAQuerySetA; const essoperation:
  TWSAeSetServiceOp;
  const dwControlFlags: DWORD): Integer; stdcall;
function WSASetServiceW(const lpqsRegInfo: LPWSAQuerySetW; const essoperation:
  TWSAeSetServiceOp;
  const dwControlFlags: DWORD): Integer; stdcall;
function WSASetService(const lpqsRegInfo: LPWSAQuerySet; const essoperation:
  TWSAeSetServiceOp;
  const dwControlFlags: DWORD): Integer; stdcall;

function WSAProviderConfigChange(var lpNotificationHandle: THandle;
  lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine:
  LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;

{ Macros }
function WSAMakeSyncReply(Buflen, Error: Word): Longint;
function WSAMakeSelectReply(Event, Error: Word): Longint;
function WSAGetAsyncBuflen(Param: Longint): Word;
function WSAGetAsyncError(Param: Longint): Word;
function WSAGetSelectEvent(Param: Longint): Word;
function WSAGetSelectError(Param: Longint): Word;

procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
procedure FD_ZERO(var FDSet: TFDSet);

{$INCLUDE ws2tcpip.inc}
{$INCLUDE wsipx.inc}
{$INCLUDE wsnwlink.inc}
{$INCLUDE wsnetbs.inc}

//=============================================================
implementation
//=============================================================

function accept; external WINSOCK2_DLL name 'accept';
function bind; external WINSOCK2_DLL name 'bind';
function closesocket; external WINSOCK2_DLL name 'closesocket';
function connect; external WINSOCK2_DLL name 'connect';
function ioctlsocket; external WINSOCK2_DLL name 'ioctlsocket';
function getpeername; external WINSOCK2_DLL name 'getpeername';
function getsockname; external WINSOCK2_DLL name 'getsockname';
function getsockopt; external WINSOCK2_DLL name 'getsockopt';
function htonl; external WINSOCK2_DLL name 'htonl';
function htons; external WINSOCK2_DLL name 'htons';
function inet_addr; external WINSOCK2_DLL name 'inet_addr';
function inet_ntoa; external WINSOCK2_DLL name 'inet_ntoa';
function listen; external WINSOCK2_DLL name 'listen';
function ntohl; external WINSOCK2_DLL name 'ntohl';
function ntohs; external WINSOCK2_DLL name 'ntohs';
function recv; external WINSOCK2_DLL name 'recv';
function recvfrom; external WINSOCK2_DLL name 'recvfrom';
function select; external WINSOCK2_DLL name 'select';
function send; external WINSOCK2_DLL name 'send';
function sendto; external WINSOCK2_DLL name 'sendto';
function setsockopt; external WINSOCK2_DLL name 'setsockopt';
function shutdown; external WINSOCK2_DLL name 'shutdown';
function socket; external WINSOCK2_DLL name 'socket';
function gethostbyaddr; external WINSOCK2_DLL name 'gethostbyaddr';
function gethostbyname; external WINSOCK2_DLL name 'gethostbyname';
function gethostname; external WINSOCK2_DLL name 'gethostname';
function getservbyport; external WINSOCK2_DLL name 'getservbyport';
function getservbyname; external WINSOCK2_DLL name 'getservbyname';
function getprotobynumber; external WINSOCK2_DLL name 'getprotobynumber';
function getprotobyname; external WINSOCK2_DLL name 'getprotobyname';
function WSAStartup; external WINSOCK2_DLL name 'WSAStartup';
function WSACleanup; external WINSOCK2_DLL name 'WSACleanup';
procedure WSASetLastError; external WINSOCK2_DLL name 'WSASetLastError';
function WSAGetLastError; external WINSOCK2_DLL name 'WSAGetLastError';
function WSAIsBlocking; external WINSOCK2_DLL name 'WSAIsBlocking';
function WSAUnhookBlockingHook; external WINSOCK2_DLL name
  'WSAUnhookBlockingHook';
function WSASetBlockingHook; external WINSOCK2_DLL name 'WSASetBlockingHook';
function WSACancelBlockingCall; external WINSOCK2_DLL name
  'WSACancelBlockingCall';
function WSAAsyncGetServByName; external WINSOCK2_DLL name
  'WSAAsyncGetServByName';
function WSAAsyncGetServByPort; external WINSOCK2_DLL name
  'WSAAsyncGetServByPort';
function WSAAsyncGetProtoByName; external WINSOCK2_DLL name
  'WSAAsyncGetProtoByName';
function WSAAsyncGetProtoByNumber; external WINSOCK2_DLL name
  'WSAAsyncGetProtoByNumber';
function WSAAsyncGetHostByName; external WINSOCK2_DLL name
  'WSAAsyncGetHostByName';
function WSAAsyncGetHostByAddr; external WINSOCK2_DLL name
  'WSAAsyncGetHostByAddr';
function WSACancelAsyncRequest; external WINSOCK2_DLL name
  'WSACancelAsyncRequest';
function WSAAsyncSelect; external WINSOCK2_DLL name 'WSAAsyncSelect';
function __WSAFDIsSet; external WINSOCK2_DLL name '__WSAFDIsSet';

{ WinSock 2 API new function prototypes }
function WSAAccept; external WINSOCK2_DLL name 'WSAAccept';
function WSACloseEvent; external WINSOCK2_DLL name 'WSACloseEvent';
function WSAConnect; external WINSOCK2_DLL name 'WSAConnect';
function WSACreateEvent; external WINSOCK2_DLL name 'WSACreateEvent';
function WSADuplicateSocketA; external WINSOCK2_DLL name 'WSADuplicateSocketA';
function WSADuplicateSocketW; external WINSOCK2_DLL name 'WSADuplicateSocketW';
function WSAEnumNetworkEvents; external WINSOCK2_DLL name
  'WSAEnumNetworkEvents';
function WSAEnumProtocolsA; external WINSOCK2_DLL name 'WSAEnumProtocolsA';
function WSAEnumProtocolsW; external WINSOCK2_DLL name 'WSAEnumProtocolsW';
function WSAEventSelect; external WINSOCK2_DLL name 'WSAEventSelect';
function WSAGetOverlappedResult; external WINSOCK2_DLL name
  'WSAGetOverlappedResult';
function WSAGetQosByName; external WINSOCK2_DLL name 'WSAGetQosByName';
function WSAhtonl; external WINSOCK2_DLL name 'WSAhtonl';
function WSAhtons; external WINSOCK2_DLL name 'WSAhtons';
function WSAIoctl; external WINSOCK2_DLL name 'WSAIoctl';
function WSAJoinLeaf; external WINSOCK2_DLL name 'WSAJoinLeaf';
function WSANtohl; external WINSOCK2_DLL name 'WSANtohl';
function WSANtohs; external WINSOCK2_DLL name 'WSANtohs';
function WSARecv; external WINSOCK2_DLL name 'WSARecv';
function WSARecvDisconnect; external WINSOCK2_DLL name 'WSARecvDisconnect';
function WSARecvFrom; external WINSOCK2_DLL name 'WSARecvFrom';
function WSAResetEvent; external WINSOCK2_DLL name 'WSAResetEvent';
function WSASend; external WINSOCK2_DLL name 'WSASend';
function WSASendDisconnect; external WINSOCK2_DLL name 'WSASendDisconnect';
function WSASendTo; external WINSOCK2_DLL name 'WSASendTo';
function WSASetEvent; external WINSOCK2_DLL name 'WSASetEvent';
function WSASocketA; external WINSOCK2_DLL name 'WSASocketA';
function WSASocketW; external WINSOCK2_DLL name 'WSASocketW';
function WSAWaitForMultipleEvents; external WINSOCK2_DLL name
  'WSAWaitForMultipleEvents';
function WSAAddressToStringA; external WINSOCK2_DLL name 'WSAAddressToStringA';
function WSAAddressToStringW; external WINSOCK2_DLL name 'WSAAddressToStringW';
function WSAStringToAddressA; external WINSOCK2_DLL name 'WSAStringToAddressA';
function WSAStringToAddressW; external WINSOCK2_DLL name 'WSAStringToAddressW';

{ Registration and Name Resolution API functions }
function WSALookupServiceBeginA; external WINSOCK2_DLL name
  'WSALookupServiceBeginA';
function WSALookupServiceBeginW; external WINSOCK2_DLL name
  'WSALookupServiceBeginW';
function WSALookupServiceNextA; external WINSOCK2_DLL name
  'WSALookupServiceNextA';
function WSALookupServiceNextW; external WINSOCK2_DLL name
  'WSALookupServiceNextW';
function WSALookupServiceEnd; external WINSOCK2_DLL name 'WSALookupServiceEnd';
function WSAInstallServiceClassA; external WINSOCK2_DLL name
  'WSAInstallServiceClassA';
function WSAInstallServiceClassW; external WINSOCK2_DLL name
  'WSAInstallServiceClassW';
function WSARemoveServiceClass; external WINSOCK2_DLL name
  'WSARemoveServiceClass';
function WSAGetServiceClassInfoA; external WINSOCK2_DLL name
  'WSAGetServiceClassInfoA';
function WSAGetServiceClassInfoW; external WINSOCK2_DLL name
  'WSAGetServiceClassInfoW';
function WSAEnumNameSpaceProvidersA; external WINSOCK2_DLL name
  'WSAEnumNameSpaceProvidersA';
function WSAEnumNameSpaceProvidersW; external WINSOCK2_DLL name
  'WSAEnumNameSpaceProvidersW';
function WSAGetServiceClassNameByClassIdA; external WINSOCK2_DLL name
  'WSAGetServiceClassNameByClassIdA';
function WSAGetServiceClassNameByClassIdW; external WINSOCK2_DLL name
  'WSAGetServiceClassNameByClassIdW';
function WSASetServiceA; external WINSOCK2_DLL name 'WSASetServiceA';
function WSASetServiceW; external WINSOCK2_DLL name 'WSASetServiceW';

{$IFDEF UNICODE}
function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketW';
function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsW';
function WSASocket; external WINSOCK2_DLL name 'WSASocketW';
function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringW';
function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressW';
function WSALookupServiceBegin; external WINSOCK2_DLL name
  'WSALookupServiceBeginW';
function WSALookupServiceNext; external WINSOCK2_DLL name
  'WSALookupServiceNextW';
function WSAInstallServiceClass; external WINSOCK2_DLL name
  'WSAInstallServiceClassW';
function WSAGetServiceClassInfo; external WINSOCK2_DLL name
  'WSAGetServiceClassInfoW';
function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name
  'WSAEnumNameSpaceProvidersW';
function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name
  'WSAGetServiceClassNameByClassIdW';
function WSASetService; external WINSOCK2_DLL name 'WSASetServiceW';
{$ELSE}
function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketA';
function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsA';
function WSASocket; external WINSOCK2_DLL name 'WSASocketA';
function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringA';
function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressA';
function WSALookupServiceBegin; external WINSOCK2_DLL name
  'WSALookupServiceBeginA';
function WSALookupServiceNext; external WINSOCK2_DLL name
  'WSALookupServiceNextA';
function WSAInstallServiceClass; external WINSOCK2_DLL name
  'WSAInstallServiceClassA';
function WSAGetServiceClassInfo; external WINSOCK2_DLL name
  'WSAGetServiceClassInfoA';
function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name
  'WSAEnumNameSpaceProvidersA';
function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name
  'WSAGetServiceClassNameByClassIdA';
function WSASetService; external WINSOCK2_DLL name 'WSASetServiceA';
{$ENDIF}

function WSAProviderConfigChange; external WINSOCK2_DLL name
  'WSAProviderConfigChange';

function WSAMakeSyncReply;
begin
  WSAMakeSyncReply := MakeLong(Buflen, Error);
end;

function WSAMakeSelectReply;
begin
  WSAMakeSelectReply := MakeLong(Event, Error);
end;

function WSAGetAsyncBuflen;
begin
  WSAGetAsyncBuflen := LOWORD(Param);
end;

function WSAGetAsyncError;
begin
  WSAGetAsyncError := HIWORD(Param);
end;

function WSAGetSelectEvent;
begin
  WSAGetSelectEvent := LOWORD(Param);
end;

function WSAGetSelectError;
begin
  WSAGetSelectError := HIWORD(Param);
end;

procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
var
  i: DWORD;
begin
  i := 0;
  while i < FDSet.fd_count do
  begin
    if FDSet.fd_array[i] = Socket then
    begin
      while i < FDSet.fd_count - 1 do
      begin
        FDSet.fd_array[i] := FDSet.fd_array[i + 1];
        Inc(i);
      end;
      Dec(FDSet.fd_count);
      Break;
    end;
    Inc(i);
  end;
end;

function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
begin
  Result := __WSAFDIsSet(Socket, FDSet);
end;

procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
begin
  if FDSet.fd_count < FD_SETSIZE then
  begin
    FDSet.fd_array[FDSet.fd_count] := Socket;
    Inc(FDSet.fd_count);
  end;
end;

procedure FD_ZERO(var FDSet: TFDSet);
begin
  FDSet.fd_count := 0;
end;

//  A macro convenient for setting up NETBIOS SOCKADDRs.

procedure SET_NETBIOS_SOCKADDR(snb: PSOCKADDR_NB; const SnbType: Word; const
  Name: PChar; const Port: Char);
var
  len: Integer;
begin
  if snb <> nil then
    with snb^ do
    begin
      snb_family := AF_NETBIOS;
      snb_type := SnbType;
      len := StrLen(Name);
      if len >= NETBIOS_NAME_LENGTH - 1 then
        System.Move(Name^, snb_name, NETBIOS_NAME_LENGTH - 1)
      else
      begin
        if len > 0 then
          System.Move(Name^, snb_name, len);
        FillChar((PChar(@snb_name) + len)^, NETBIOS_NAME_LENGTH - 1 - len, ' ');
      end;
      snb_name[NETBIOS_NAME_LENGTH - 1] := Port;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -