亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wsocket.pas

?? < Delphi網絡通信協議分析與應用實現>>一書的源代碼。
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
Feb 14, 1999  V4.00 Jump to next major version number because lots of
              fundamental changes have been done. See below.

              Use runtime dynamic link with winsock. All winsock functions
              used by TWSocket are linked at runtime instead of loadtime. This
              allows programs to run without winsock installed, provided program
              doesn't try to use TWSocket or winsock function without first
              checking for winsock installation.
              Removed WSocketLoadWinsock and all use to DllStarted because it
              is no longer necessary because winsock is automatically loaded
              and initialized with the first call to a winsock function.

              Added MessagePump to centralize call to the message pump.
              It is a virtual procedure so that you can override it to
              cutomize your message pump. Also changed slightly ProcessMessages
              to closely match what is done in the forms unit.

              Removed old stuff related to WaitCtrl (was already excluded from
              compilation using a conditional directive).

              Added NOFORMS conditional compilation to exclude the Forms unit
              from wsocket. This will reduce exe or dll size by 100 to 150KB.
              To use this feature, you have to add NOFORMS in your project
              options in the "defines" edit box in the "directory/conditional"
              tab. Then you must add a message pump to your application and
              call it from TWSocket.OnMessagePump event handler. TWSocket really
              need a message pump in order to receive messages from winsock.
              Depending on how your application is built, you can use either
              TWSocket.MessageLoop or TWSocket.ProcessMessages to quickly build
              a working message pump. Or you may build your own custom message
              pump taylored to your needs. Your message pump must set
              TWSocket.Terminated property to TRUE when your application
              terminates or you may experience long delays when closing your
              application.
              You may use NOFORMS setting even if you use the forms unit (GUI
              application). Simply call Application.ProcessMessages in the
              OnMessagePump event handler.
              OnMessagePump event is not visible in the object inspector. You
              must assign it at run-time before using the component and after
              having created it (in a GUI application you can do that in the
              FormCreate event, in a console application, you can do it right
              after TWSocket.Create call).
Feb 17, 1999  V4.01 Added LineEcho and LineEdit features.
Feb 27, 1999  V4.02 Added TCustomLineWSocket.GetRcvdCount to make RcvdCount
              property and ReceiveStr work in line mode.
Mar 01, 1999  V4.03 Added conditional compile for BCB4. Thanks to James
              Legg <jlegg@iname.com>.
Mar 14, 1999  V4.04 Corrected a bug: wsocket hangup when there was no
              OnDataAvailable handler and line mode was on.
Apr 21, 1999  V4.05 Added H+ (long strings) and X+ (extended syntax)
              compilation options
May 07, 1999  V4.06 Added WSAECONNABORTED to valid error codes in TryToSend.
Jul 21, 1999  V4.07 Added GetPeerPort method, PeerPort and PeerAddr propertied
              as suggested by J. Punter <JPunter@login-bv.com>.

 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit WSocket;

{$B-}           { Enable partial boolean evaluation   }
{$T-}           { Untyped pointers                    }
{$X+}           { Enable extended syntax              }
{$IFNDEF VER80} { Not for Delphi 1                    }
    {$H+}       { Use long strings                    }
    {$J+}       { Allow typed constant to be modified }
{$ENDIF}
{$IFDEF VER110} { C++ Builder V3.0                    }
    {$ObjExportAll On}
{$ENDIF}

interface

uses
  WinTypes, WinProcs, Messages, Classes, SysUtils,
{$IFNDEF NOFORMS} { See comments in history at 14/02/99 }
  Forms,
{$ENDIF}
  WSockBuf, WinSock;

const
  WSocketVersion            = 407;
  CopyRight    : String     = ' TWSocket (c) 96-99 F. Piette V4.07 ';
  WM_ASYNCSELECT            = WM_USER + 1;
  WM_ASYNCGETHOSTBYNAME     = WM_USER + 2;
  WM_ASYNCGETHOSTBYADDR     = WM_USER + 3;
  WM_TRIGGER_DATA_AVAILABLE = WM_USER + 20;
  WSA_WSOCKET_TIMEOUT       = 12001;
{$IFDEF WIN32}
  winsocket = 'wsock32.dll';      { 32 bits TCP/IP system DLL }
{$ELSE}
  winsocket = 'winsock.dll';      { 16 bits TCP/IP system DLL }
{$ENDIF}

type
  ESocketException = class(Exception);
  TBgExceptionEvent = procedure (Sender : TObject;
                                 E : Exception;
                                 var CanClose : Boolean) of object;

  TSocketState = (wsInvalidState,
                  wsOpened,     wsBound,
                  wsConnecting, wsConnected,
                  wsAccepting,  wsListening,
                  wsClosed);
  TSocketSendFlags = (wsSendNormal, wsSendUrgent);
  TSocketLingerOnOff = (wsLingerOff, wsLingerOn, wsLingerNoSet);

  TDataAvailable    = procedure (Sender: TObject; Error: word) of object;
  TDataSent         = procedure (Sender: TObject; Error: word) of object;
  TSessionClosed    = procedure (Sender: TObject; Error: word) of object;
  TSessionAvailable = procedure (Sender: TObject; Error: word) of object;
  TSessionConnected = procedure (Sender: TObject; Error: word) of object;
  TDnsLookupDone    = procedure (Sender: TObject; Error: 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;
{$IFDEF VER110}  { C++Builder V3 }
  TSocket = integer;
{$ENDIF}
{$IFDEF VER120} { C++Builder V4 }
  TSocket = integer;
{$ENDIF}

  TCustomWSocket = class(TComponent)
  private
    FDnsResult          : String;
    FDnsResultList      : TStrings;
    FASocket            : TSocket;               { Accepted socket }
    FBufList            : TList;
    FBufSize            : Integer;
    FSendFlags          : Integer;
    FLastError          : Integer;
    FWindowHandle       : HWND;
    FDnsLookupBuffer    : array [0..MAXGETHOSTSTRUCT] of char;
    FDnsLookupHandle    : THandle;
  {$IFDEF VER80}
    FTrumpetCompability : Boolean;
  {$ENDIF}
  protected
    FHSocket            : TSocket;
    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;
    FType               : integer;
    FLingerOnOff        : TSocketLingerOnOff;
    FLingerTimeout      : Integer;              { In seconds, 0 = disabled }
    ReadLineCount       : Integer;
    bWrite              : Boolean;
    nMoreCnt            : Integer;
    bMoreFlag           : Boolean;
    nMoreMax            : Integer;
    bAllSent            : Boolean;
    FReadCount          : LongInt;
    FPaused             : Boolean;
    FCloseInvoked       : Boolean;
    FFlushTimeout       : Integer;
    FMultiThreaded      : Boolean;
    FState              : TSocketState;
    FRcvdFlag           : Boolean;
    FTerminated         : Boolean;
    FOnSessionAvailable : TSessionAvailable;
    FOnSessionConnected : TSessionConnected;
    FOnSessionClosed    : TSessionClosed;
    FOnChangeState      : TChangeState;
    FOnDataAvailable    : TDataAvailable;
    FOnDataSent         : TDataSent;
    FOnLineTooLong      : TNotifyEvent;
    FOnDnsLookupDone    : TDnsLookupDone;
    FOnError            : TNotifyEvent;
    FOnBgException      : TBgExceptionEvent;
    FOnDisplay          : TDebugDisplay;
    FOnMessagePump      : TNotifyEvent;
    procedure   WndProc(var MsgRec: TMessage); 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   ChangeState(NewState : TSocketState);
    procedure   TryToSend;
    procedure   ASyncReceive(Error : Word);
    procedure   AssignDefaultValue; virtual;
    procedure   InternalClose(bShut : Boolean; Error : 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   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;
    procedure   TriggerDisplay(Msg : String);
    function    TriggerDataAvailable(Error : Word) : Boolean; virtual;
    procedure   TriggerSessionAvailable(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;
  public
    sin         : TSockAddrIn;
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure   Connect; virtual;
    procedure   Close; 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(Str : String) : Integer; virtual;
    procedure   DnsLookup(HostName : String); virtual;
    procedure   ReverseDnsLookup(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    TimerIsSet(var tvp : TTimeVal) : Boolean; virtual;
    procedure   TimerClear(var tvp : TTimeVal); virtual;
    function    TimerCmp(var tvp : TTimeVal; var uvp : TTimeVal; IsEqual : Boolean) : Boolean; virtual;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产一区二区三区四区| 91美女在线视频| 欧美mv日韩mv国产网站app| 亚洲成a人片在线不卡一二三区| 在线观看免费亚洲| 亚洲v日本v欧美v久久精品| 91精品国产91热久久久做人人| 爽好多水快深点欧美视频| 欧美一级片免费看| 国产精品一色哟哟哟| 欧美国产97人人爽人人喊| 色偷偷一区二区三区| 五月天欧美精品| 亚洲精品在线观看视频| 成人免费观看视频| 中文字幕日韩一区| 欧美裸体bbwbbwbbw| 另类欧美日韩国产在线| 国产色91在线| 欧美亚日韩国产aⅴ精品中极品| 水野朝阳av一区二区三区| 久久久五月婷婷| 在线视频一区二区免费| 韩国v欧美v日本v亚洲v| 亚洲三级电影全部在线观看高清| 欧美日韩激情一区| 国产最新精品免费| 亚洲一区二区三区四区五区黄 | 国产欧美视频一区二区三区| 99re热视频精品| 奇米在线7777在线精品| 国产免费观看久久| 精品视频一区二区三区免费| 国产资源在线一区| 亚洲精品videosex极品| 精品国产乱码久久久久久夜甘婷婷 | 日韩精品亚洲一区二区三区免费| 久久精品一区蜜桃臀影院| 欧洲色大大久久| 国产一区二区三区高清播放| 亚洲在线一区二区三区| 国产亚洲综合性久久久影院| 欧美喷潮久久久xxxxx| 成人一级片网址| 美女视频黄久久| 亚洲国产中文字幕在线视频综合| 久久久99精品久久| 69av一区二区三区| 色系网站成人免费| 国产白丝网站精品污在线入口| 日韩经典中文字幕一区| 欧美男女性生活在线直播观看| 91在线观看污| 青青青爽久久午夜综合久久午夜| 国产精品天天摸av网| 日韩视频一区在线观看| 色综合久久综合网97色综合| 国产成人一级电影| 狠狠色丁香久久婷婷综合丁香| 午夜av一区二区| 亚洲一区二区三区四区五区中文| 国产精品传媒在线| 国产亚洲综合在线| 精品国产免费久久 | 亚洲美女屁股眼交| 国产女同性恋一区二区| 精品国产乱码久久久久久1区2区 | 亚洲精品中文在线| 国产精品天美传媒| 国产精品免费久久| 国产区在线观看成人精品| 精品三级在线观看| 精品国精品国产| 日韩欧美一级二级| 日韩精品中文字幕在线不卡尤物| 91精品午夜视频| 7777精品伊人久久久大香线蕉的 | 欧美在线观看禁18| 色偷偷久久人人79超碰人人澡| 99久久精品免费看国产免费软件| 国产.精品.日韩.另类.中文.在线.播放| 黑人精品欧美一区二区蜜桃| 美日韩一区二区三区| 日本91福利区| 麻豆精品视频在线| 麻豆91精品91久久久的内涵| 毛片一区二区三区| 国产一区二区h| 国产成人精品三级麻豆| av网站一区二区三区| 99国内精品久久| 91国内精品野花午夜精品| 欧美网站大全在线观看| 欧美一区二区三区免费视频| 欧美变态口味重另类| 国产亚洲精品bt天堂精选| 中文字幕一区二区日韩精品绯色| 亚洲黄色在线视频| 首页亚洲欧美制服丝腿| 91成人免费网站| 欧美日韩一区三区| 日韩一区二区电影| 国产视频911| 亚洲欧美欧美一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 日韩综合小视频| 精品一区二区免费在线观看| 大白屁股一区二区视频| 日本韩国一区二区三区| 91麻豆精品国产自产在线观看一区 | 老司机午夜精品| 成人av在线影院| 欧美日韩精品一区二区三区蜜桃 | 日本久久精品电影| 日韩一级高清毛片| 国产精品久99| 亚洲va欧美va人人爽午夜| 国产一区二区精品久久99| 色综合久久久久久久| 精品国产三级电影在线观看| 亚洲欧美自拍偷拍色图| 欧美一区二区三区视频在线| 日本一区二区视频在线| 亚洲超碰精品一区二区| 成人高清视频免费观看| 日韩欧美中文字幕精品| 亚洲视频1区2区| 激情av综合网| 欧美吞精做爰啪啪高潮| 国产清纯白嫩初高生在线观看91| 亚洲成人免费影院| 成人激情午夜影院| 日韩免费性生活视频播放| 亚洲精品日韩综合观看成人91| 老司机精品视频一区二区三区| 99精品桃花视频在线观看| 日韩欧美国产综合一区 | 石原莉奈在线亚洲三区| 波多野结衣的一区二区三区| 精品少妇一区二区三区免费观看| 亚洲女与黑人做爰| 高清av一区二区| 欧美成人三级在线| 丝袜美腿一区二区三区| 日本道在线观看一区二区| 中文字幕国产一区二区| 麻豆精品一区二区av白丝在线| 欧美色网站导航| 综合久久久久久| 99久久婷婷国产| 日本一区二区视频在线观看| 韩国成人福利片在线播放| 欧美大肚乱孕交hd孕妇| 视频一区欧美日韩| 欧美精品国产精品| 午夜视频久久久久久| 欧美这里有精品| 一区二区三区中文字幕| 国产一区二区三区香蕉 | 亚洲欧美日本韩国| 在线亚洲一区二区| 久久久一区二区三区捆绑**| 日韩电影在线免费看| 欧美日韩一区二区三区四区| 亚洲精品国产a久久久久久 | 国产精品网站在线观看| 极品少妇一区二区| 久久综合九色综合欧美98| 99精品在线免费| 亚洲国产精品成人综合 | 成人免费毛片app| 日本一区二区视频在线观看| 粉嫩13p一区二区三区| 国产欧美日韩精品一区| 成人自拍视频在线| 国产精品久久久一区麻豆最新章节| 国产不卡视频在线观看| 一区二区中文视频| 99精品欧美一区| 亚洲综合在线五月| 欧美蜜桃一区二区三区| 久久se精品一区精品二区| 久久久久国产成人精品亚洲午夜| 成人免费毛片高清视频| 亚洲人精品一区| 欧美亚洲自拍偷拍| 欧美一区二区视频网站| 美女高潮久久久| 成人动漫av在线| 亚洲福利视频导航| 日韩欧美一区在线| 粉嫩aⅴ一区二区三区四区五区 | 日本一区二区在线不卡| 91在线porny国产在线看| 亚洲综合视频在线观看| 精品视频999| 精品影视av免费| 亚洲同性gay激情无套| 欧美日韩在线一区二区| 激情另类小说区图片区视频区|