📄 wsocket.pas
字号:
socksTtlExpired = 20009;
socksUnknownCommand = 20010;
socksUnknownAddressType = 20011;
socksUnassignedError = 20012;
socksInternalError = 20013;
socksDataReceiveError = 20014;
socksAuthenticationFailed = 20015;
socksRejectedOrFailed = 20016;
socksHostResolutionFailed = 20017;
var
GInitData : TWSADATA;
IPList : TStrings;
procedure Register;
begin
RegisterComponents('FPiette', [TWSocket]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
procedure SetLength(var S: string; NewLength: Integer);
begin
S[0] := chr(NewLength);
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function atoi(value : string) : Integer;
var
i : Integer;
begin
Result := 0;
i := 1;
while (i <= Length(Value)) and (Value[i] = ' ') do
i := i + 1;
while (i <= Length(Value)) and (Value[i] >= '0') and (Value[i] <= '9')do begin
Result := Result * 10 + ord(Value[i]) - ord('0');
i := i + 1;
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function IsDigit(Ch : Char) : Boolean;
begin
Result := (ch >= '0') and (ch <= '9');
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
function TrimRight(Str : String) : String;
var
i : Integer;
begin
i := Length(Str);
while (i > 0) and (Str[i] = ' ') do
i := i - 1;
Result := Copy(Str, 1, i);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TrimLeft(Str : String) : String;
var
i : Integer;
begin
if Str[1] <> ' ' then
Result := Str
else begin
i := 1;
while (i <= Length(Str)) and (Str[i] = ' ') do
i := i + 1;
Result := Copy(Str, i, Length(Str) - i + 1);
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function Trim(Str : String) : String;
begin
Result := TrimLeft(TrimRight(Str));
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomWSocket.RaiseException(const Msg : String);
begin
if Assigned(FOnError) then
TriggerError
else
raise ESocketException.Create(Msg);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomWSocket.RaiseExceptionFmt(const Fmt : String; args : array of const);
begin
if Assigned(FOnError) then
TriggerError
else
raise ESocketException.CreateFmt(Fmt, args);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF NEVER} { 14/02/99 }
function LoadWinsock(FileName : PChar) : Boolean;
var
LastError : LongInt;
begin
if not DllStarted then begin
LastError := WSocket_WSAStartup($101, GInitData);
if LastError <> 0 then begin
raise ESocketException.CreateFmt('%s: WSAStartup error #%d',
[FileName, LastError]);
end;
DllStarted := TRUE;
end;
Result := TRUE;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function WSocketLoadWinsock : Boolean;
begin
Result := LoadWinsock(winsocket);
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure WSocketUnloadWinsock;
begin
{$IFDEF NEVER} { 14/02/99 }
if DllStarted then begin
DllStarted := FALSE;
WSocket_WSACleanup;
end;
{$ENDIF}
if FDllHandle <> 0 then begin
WSocket_WSACleanup;
FreeLibrary(FDllHandle);
FDllHandle := 0;
FWSAStartup := nil;
FWSACleanup := nil;
FWSASetLastError := nil;
FWSAGetLastError := nil;
FWSACancelAsyncRequest := nil;
FWSAAsyncGetHostByName := nil;
FWSAAsyncGetHostByAddr := nil;
FWSAAsyncSelect := nil;
FGetServByName := nil;
FGetProtoByName := nil;
FGetHostByName := nil;
FGetHostName := nil;
FOpenSocket := nil;
FShutdown := nil;
FSetSockOpt := nil;
FGetSockOpt := nil;
FSendTo := nil;
FSend := nil;
FRecv := nil;
FRecvFrom := nil;
Fntohs := nil;
Fntohl := nil;
FListen := nil;
FIoctlSocket := nil;
FInet_ntoa := nil;
FInet_addr := nil;
Fhtons := nil;
Fhtonl := nil;
FGetSockName := nil;
FGetPeerName := nil;
FConnect := nil;
FCloseSocket := nil;
FBind := nil;
FAccept := nil;
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function WSocketGetProc(const ProcName : String) : Pointer;
{$IFDEF VER80}
var
Error : THandle;
Buf : String;
LastError : LongInt;
begin
if FDllHandle = 0 then begin
{ Delphi 1 strings are not nul terminated }
Buf := FDllName + #0;
FDllHandle := LoadLibrary(@Buf[1]);
if FDllHandle < HINSTANCE_ERROR then begin
Error := FDllHandle;
FDllHandle := 0;
raise ESocketException.Create('Unable to load ' + FDllName +
' Error #' + IntToStr(Error));
end;
LastError := WSocket_WSAStartup($101, GInitData);
if LastError <> 0 then begin
raise ESocketException.CreateFmt('%s: WSAStartup error #%d',
[FDllName, LastError]);
end;
end;
if Length(ProcName) = 0 then
Result := nil
else begin
{ Delphi 1 strings are not nul terminated }
Buf := ProcName + #0;
Result := GetProcAddress(FDllHandle, @Buf[1]);
if Result = nil then
raise ESocketException.Create('Procedure ' + ProcName +
' not found in ' + FDllName);
end;
end;
{$ELSE}
var
LastError : LongInt;
begin
if FDllHandle = 0 then begin
FDllHandle := LoadLibrary(@FDllName[1]);
if FDllHandle = 0 then
raise ESocketException.Create('Unable to load ' + FDllName +
' Error #' + IntToStr(GetLastError));
LastError := WSocket_WSAStartup($101, GInitData);
if LastError <> 0 then begin
raise ESocketException.CreateFmt('%s: WSAStartup error #%d',
[FDllName, LastError]);
end;
end;
if Length(ProcName) = 0 then
Result := nil
else begin
Result := GetProcAddress(FDllHandle, @ProcName[1]);
if Result = nil then
raise ESocketException.Create('Procedure ' + ProcName +
' not found in ' + winsocket +
' Error #' + IntToStr(GetLastError));
end;
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function WSocket_WSAStartup(
wVersionRequired: word;
var WSData: TWSAData): Integer;
begin
if @FWSAStartup = nil then
@FWSAStartup := WSocketGetProc('WSAStartup');
Result := FWSAStartup(wVersionRequired, WSData);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function WS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -