?? wsocket.pas
字號:
TSessionAvailable = procedure (Sender: TObject; ErrCode: Word) of object;
TSessionConnected = procedure (Sender: TObject; ErrCode: Word) of object;
TDnsLookupDone = procedure (Sender: TObject; ErrCode: Word) of object;
TChangeState = procedure (Sender: TObject;
OldState, NewState : TSocketState) of object;
TDebugDisplay = procedure (Sender: TObject; var Msg : String) of object;
TWSocketSyncNextProc = procedure of object;
TWSocketOption = (wsoNoReceiveLoop, wsoTcpNoDelay, wsoSIO_RCVALL);
TWSocketOptions = set of TWSocketOption;
{$IFDEF DELPHI4_UP}
{ TSocket type definition has been removed starting from Delphi 4 }
TSocket = u_int;
{$ENDIF}
TCustomWSocket = class(TComponent)
private
FDnsResult : String;
FDnsResultList : TStrings;
FSendFlags : Integer;
FLastError : Integer;
FWindowHandle : HWND;
FDnsLookupBuffer : array [0..MAXGETHOSTSTRUCT] of char;
FDnsLookupCheckMsg : Boolean;
FDnsLookupTempMsg : TMessage;
{$IFDEF DELPHI1}
FTrumpetCompability : Boolean;
{$ENDIF}
protected
FHSocket : TSocket;
FASocket : TSocket; { Accepted socket }
FAddrStr : String;
FAddrResolved : Boolean;
FAddrFormat : Integer;
FAddrAssigned : Boolean;
FProto : integer;
FProtoAssigned : Boolean;
FProtoResolved : Boolean;
FLocalPortResolved : Boolean;
FProtoStr : String;
FPortStr : String;
FPortAssigned : Boolean;
FPortResolved : Boolean;
FPortNum : Integer;
FLocalPortStr : String;
FLocalPortNum : Integer;
FLocalAddr : String; { IP address for local interface to use }
FType : Integer;
FBufList : TList;
FBufSize : Integer; { TWSocket internal buffer chunk size }
FLingerOnOff : TSocketLingerOnOff;
FLingerTimeout : Integer; { In seconds, 0 = disabled }
FListenBacklog : Integer;
ReadLineCount : Integer;
bAllSent : Boolean;
FReadCount : LongInt;
FPaused : Boolean;
FCloseInvoked : Boolean;
FFlushTimeout : Integer;
FMultiThreaded : Boolean;
FDnsLookupHandle : THandle;
{ More info about multicast can be found at: }
{ http://ntrg.cs.tcd.ie/undergrad/4ba2/multicast/antony/ }
{ http://www.tldp.org/HOWTO/Multicast-HOWTO-6.html }
FMultiCast : Boolean;
{ Multicast addresses consists of a range of addresses from 224.0.0.0 to }
{ 239.255.255.255. However, the multicast addresses from 224.0.0.0 to }
{ 224.0.0.255 are reserved for multicast routing information; Application }
{ programs should use multicast addresses outside this range. }
FMultiCastAddrStr : String;
FMultiCastIpTTL : Integer;
FReuseAddr : Boolean;
FComponentOptions : TWSocketOptions;
FState : TSocketState;
FRcvdFlag : Boolean;
FTerminated : Boolean;
FSelectEvent : LongInt;
FSelectMessage : WORD;
FOnSessionAvailable : TSessionAvailable;
FOnSessionConnected : TSessionConnected;
FOnSessionClosed : TSessionClosed;
FOnChangeState : TChangeState;
FOnDataAvailable : TDataAvailable;
FOnDataSent : TDataSent;
FOnSendData : TSendData;
{ FOnLineTooLong : TNotifyEvent; }
FOnDnsLookupDone : TDnsLookupDone;
FOnError : TNotifyEvent;
FOnBgException : TBgExceptionEvent;
FOnDisplay : TDebugDisplay;
FOnMessagePump : TNotifyEvent;
FThreadId : THandle;
FSocketSndBufSize : Integer; { Winsock internal socket send buffer size }
procedure WndProc(var MsgRec: TMessage); virtual;
procedure AllocateSocketHWnd; virtual;
procedure DeallocateSocketHWnd; virtual;
procedure SocketError(sockfunc: string);
procedure WMASyncSelect(var Msg: TMessage); message WM_ASYNCSELECT;
procedure WMAsyncGetHostByName(var Msg: TMessage); message WM_ASYNCGETHOSTBYNAME;
procedure WMAsyncGetHostByAddr(var Msg: TMessage); message WM_ASYNCGETHOSTBYADDR;
procedure WMCloseDelayed(var Msg: TMessage); message WM_CLOSE_DELAYED;
procedure WMRelease(var Msg: TMessage); message WM_WSOCKET_RELEASE;
procedure ChangeState(NewState : TSocketState);
procedure TryToSend; virtual;
procedure ASyncReceive(Error : Word; MySocketOptions : TWSocketOptions);
procedure AssignDefaultValue; virtual;
procedure InternalClose(bShut : Boolean; Error : Word); virtual;
procedure InternalAbort(ErrCode : Word); virtual;
procedure Notification(AComponent: TComponent; operation: TOperation); override;
procedure SetSendFlags(newValue : TSocketSendFlags);
function GetSendFlags : TSocketSendFlags;
procedure SetAddr(InAddr : String);
function GetAddr : String;
procedure SetRemotePort(sPort : String); virtual;
function GetRemotePort : String;
procedure SetLocalAddr(sLocalAddr : String);
procedure SetLocalPort(sLocalPort : String);
procedure SetProto(sProto : String); virtual;
function GetProto : String;
function GetRcvdCount : LongInt; virtual;
procedure BindSocket; virtual;
procedure SendText(Str : String);
function RealSend(Data : Pointer; Len : Integer) : Integer; virtual;
procedure RaiseExceptionFmt(const Fmt : String; args : array of const); virtual;
procedure RaiseException(const Msg : String); virtual;
procedure HandleBackGroundException(E: Exception); virtual;
function GetReqVerLow: BYTE;
procedure SetReqVerLow(const Value: BYTE);
function GetReqVerHigh: BYTE;
procedure SetReqVerHigh(const Value: BYTE);
procedure TriggerDisplay(Msg : String);
procedure TriggerSendData(BytesSent : Integer);
function TriggerDataAvailable(Error : Word) : Boolean; virtual;
procedure TriggerSessionAvailable(Error : Word); virtual;
procedure TriggerSessionConnectedSpecial(Error : Word); virtual;
procedure TriggerSessionConnected(Error : Word); virtual;
procedure TriggerSessionClosed(Error : Word); virtual;
procedure TriggerDataSent(Error : Word); virtual;
procedure TriggerChangeState(OldState, NewState : TSocketState); virtual;
procedure TriggerDNSLookupDone(Error : Word); virtual;
procedure TriggerError; virtual;
function DoRecv(var Buffer;
BufferSize : Integer;
Flags : Integer) : Integer; virtual;
function DoRecvFrom(FHSocket : TSocket;
var Buffer;
BufferSize : Integer;
Flags : Integer;
var From : TSockAddr;
var FromLen : Integer) : Integer; virtual;
procedure Do_FD_CONNECT(var Msg: TMessage); virtual;
procedure Do_FD_READ(var Msg: TMessage); virtual;
procedure Do_FD_WRITE(var Msg: TMessage); virtual;
procedure Do_FD_ACCEPT(var Msg: TMessage); virtual;
procedure Do_FD_CLOSE(var Msg: TMessage); virtual;
procedure DupConnected; virtual;
public
sin : TSockAddrIn;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Connect; virtual;
procedure Close; virtual;
procedure CloseDelayed; virtual;
procedure Release; virtual;
procedure Abort; virtual;
procedure Flush; virtual;
procedure WaitForClose; virtual;
procedure Listen; virtual;
function Accept: TSocket; virtual;
function Receive(Buffer : Pointer; BufferSize: integer) : integer; virtual;
function ReceiveStr : string; virtual;
function ReceiveFrom(Buffer : Pointer;
BufferSize : Integer;
var From : TSockAddr;
var FromLen : Integer) : integer; virtual;
function PeekData(Buffer : Pointer; BufferSize: integer) : integer;
function Send(Data : Pointer; Len : Integer) : integer; virtual;
function SendTo(Dest : TSockAddr;
DestLen : Integer;
Data : Pointer;
Len : Integer) : integer; virtual;
function SendStr(const Str : String) : Integer; virtual;
procedure DnsLookup(const AHostName : String); virtual;
procedure ReverseDnsLookup(const HostAddr: String); virtual;
procedure CancelDnsLookup; virtual;
function GetPeerAddr: string; virtual;
function GetPeerPort: string; virtual;
function GetPeerName(var Name : TSockAddrIn; NameLen : Integer) : integer; virtual;
function GetXPort: string; virtual;
function GetXAddr: string; virtual;
function TimerIsSet(var tvp : TTimeVal) : Boolean; virtual;
procedure TimerClear(var tvp : TTimeVal); virtual;
function TimerCmp(var tvp : TTimeVal; var uvp : TTimeVal; IsEqual : Boolean) : Boolean; virtual;
function GetSockName(var saddr : TSockAddrIn; var saddrlen : Integer) : integer; virtual;
procedure SetLingerOption;
procedure Dup(NewHSocket : TSocket); virtual;
procedure Shutdown(How : Integer); virtual;
procedure Pause; virtual;
procedure Resume; virtual;
procedure PutDataInSendBuffer(Data : Pointer; Len : Integer); virtual;
procedure PutStringInSendBuffer(const Str : String);
procedure DeleteBufferedData;
procedure MessagePump; virtual;
{$IFDEF COMPILER2_UP}
procedure ThreadAttach;
procedure ThreadDetach;
procedure MessageLoop;
function ProcessMessage : Boolean;
procedure ProcessMessages;
{$ENDIF}
{$IFDEF NOFORMS}
property Terminated : Boolean read FTerminated
write FTerminated;
property OnMessagePump : TNotifyEvent read FOnMessagePump
write FOnMessagePump;
{$ENDIF}
protected
property PortNum : Integer read FPortNum;
property Handle : HWND read FWindowHandle;
property HSocket : TSocket read FHSocket
write Dup;
property Addr : string read GetAddr
write SetAddr;
property Port : string read GetRemotePort
write SetRemotePort;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -