Class TSock (unit Sock)

Inherits from

TCustomControl

Constructors


Constructor Create(AOwner : TComponent);

*** Constructor/Destructor

Constructor CreateWithSocket(AOwner : TComponent; NewSocket : TSocket);

Protected Constructor Can Only Be Called By TSock Class

This Constructor Assumes NewSocket Is A Valid Socket Handle



Functions

Function Accept(Var NewSock : TSock) : Boolean;

The Accept Method Will Create NewSock, But User Must Free

Function Close : Boolean;

Datagram Sockets Require A Bind

Function HostLookup(Value : String) : TInAddr;

Public Support Methods

Accept Creates A New Instance Of A TSock Component And Returns It To The User Application.


Function Open : Boolean;

*** Support Methods

Function PortLookup(Value : String) : U_Short;

Isn't Cached, Have To Do A GetHostByName

Function Receive : String;

Do Not Loop For A Non-Blocking Socket

Function ReceiveCount(Count : Integer) : String;


Function ReceiveDatagram(Var HostName : String) : String;


Function ReceiveLine : String;

Used To Loop While We're Connected And Anything Is In The Input Queue

Function Send(Value : String) : Boolean;


Function SendDatagram(Value, HostName : String) : Boolean;


Function StartListen : Boolean;

StartListen And StopListen Are A Robust Form Of Setting Listen

Otherwise, Perform A GetServByName Based On The Protocol


Function StopListen : Boolean;


Destructor Destroy;


Procedure Loaded;

Loaded Handles Starting Listening Mode After Streaming The Properties

Procedure WMPaint(Var Message : TWMPaint);

If AutoAccept Is Set To True And OnAutoAccept Is Set.

Procedure WMSize(Var Message : TWMSize);


Procedure WMSock(Var Message : TMessage);

Event Handlers

*** Event Handling


Procedure DoInfo(SocketInfo : TSocketInfo; Msg : String);

Private Support Methods

Convert FRecvAddrIn To A String IP Address


Function GetConnected : Boolean;


Function GetEOF : Boolean;


Function GetRemoteHost : String;

At Design-Time, stDatagram And Listen Are Mutually Exclusive

Function GetText : String;


Procedure SetAutoAccept(Value : Boolean);

Datagram Sockets Only Care About Read Messages

Procedure SetBitmap;


Procedure SetBlocking(Value : Boolean);

SetBlocking Will Set The Asynchronous Mode

Procedure SetConnected(Value : Boolean);


Procedure SetHostName(Value : String);

Property Set/Get Routines

*** Property Set/Get Procedures


Procedure SetListen(Value : Boolean);

Just Call The Send Method And Ignore The Boolean Result

Procedure SetPortName(Value : String);


Procedure SetSocket(Value : TSocket);


Procedure SetSocketType(Value : TSocketType);

Otherwise, We Need To Check To See If It's Already Listening

Procedure SetText(Value : String);

Just Call The Receive Method

Properties

property AutoAccept : Boolean


property Blocking : Boolean


property BlockingTimeout : Integer


property HostName : String


property LineBreak : TLineBreak


property Listen : Boolean


property PortName : String


property SocketType : TSocketType


property Connected : Boolean


property EndOfFile : Boolean

Used To Read FConnected

property RemoteHost : String

RemoteHost Returns The Remote IP If SocketType=stStream And Will Return The Most Recent Incoming Datagram IP If SocketType=stDatagram

property Socket : TSocket


property Stream : TStream


property Text : String


Events

event OnAccept : TNotifyEvent


event OnAutoAccept : TNotifyAutoEvent


event OnConnect : TNotifyEvent


event OnDisconnect : TNotifyEvent


event OnInfo : TNotifyInfoEvent


event OnRead : TNotifyReadEvent


event OnWrite : TNotifyEvent


Variables

FAutoAccept : Boolean;

Do Blocking Calls?

FBlocking : Boolean;

Socket Listens?

FBlockTime : Integer;

Are We Connected?

FBmp_Listen : TBitmap;

UDP Bitmap

FBmp_TCP : TBitmap;

Holder For Design-Time Image

FBmp_UDP : TBitmap;

TCP Bitmap

FCharBuf : Array[1..32768] Of Char;

Listening Bitmap Character Buffer (Most WINSOCK.

FConnected : Boolean;

Automatically Accept Incomings

FHostName : String;

Line Break Style For Line Input

FInBuffer : String;

Socket Handle

FLastChar : Char;

Address Information Block For RecvFrom

FLineBreak : TLineBreak;

Socket Type (Stream Or Datagram

FListen : Boolean;

Output Buffer For Non-Blocking

FOnAccept : TNotifyEvent;


FOnAutoAccept : TNotifyAutoEvent;


FOnConnect : TNotifyEvent;

Associated TSockStream Object

FOnDisconnect : TNotifyEvent;


FOnInfo : TNotifyInfoEvent;


FOnRead : TNotifyReadEvent;


FOnWrite : TNotifyEvent;


FOutBuffer : String;

Input Buffer

FPicture : TBitmap;

Last Character Read For Line-Input

FPortName : String;

Host Name Or IP Address

FRecvAddrIn : TSockAddrIn;

Address Information Block

FSockAddrIn : TSockAddrIn;


FSocket : TSocket;

Port Name Or Well-Known Number

FSocketType : TSocketType;


FStream : TStream;

How Long To Wait For Blocking Operation


Constructors


Constructor Create(AOwner : TComponent);

*** Constructor/Destructor


Constructor CreateWithSocket(AOwner : TComponent; NewSocket : TSocket);

Protected Constructor Can Only Be Called By TSock Class

This Constructor Assumes NewSocket Is A Valid Socket Handle


Functions


Function Accept(Var NewSock : TSock) : Boolean;

The Accept Method Will Create NewSock, But User Must Free


Function Close : Boolean;

Datagram Sockets Require A Bind


Function HostLookup(Value : String) : TInAddr;

Public Support Methods

Accept Creates A New Instance Of A TSock Component And Returns It To The User Application. The User Is Responsible For Freeing The Component.


Function Open : Boolean;

*** Support Methods


Function PortLookup(Value : String) : U_Short;

Isn't Cached, Have To Do A GetHostByName


Function Receive : String;

Do Not Loop For A Non-Blocking Socket


Function ReceiveCount(Count : Integer) : String;


Function ReceiveDatagram(Var HostName : String) : String;


Function ReceiveLine : String;

Used To Loop While We're Connected And Anything Is In The Input Queue


Function Send(Value : String) : Boolean;


Function SendDatagram(Value, HostName : String) : Boolean;


Function StartListen : Boolean;

StartListen And StopListen Are A Robust Form Of Setting Listen

Otherwise, Perform A GetServByName Based On The Protocol


Function StopListen : Boolean;


Destructor Destroy;


Procedure Loaded;

Loaded Handles Starting Listening Mode After Streaming The Properties


Procedure WMPaint(Var Message : TWMPaint);

If AutoAccept Is Set To True And OnAutoAccept Is Set... Create A New Socket Based On The Accepted One And Begin AutoAccept As If It Were A Thread... The AutoAccept Routine Is Responsible For Destroying The New Socket Component.


Procedure WMSize(Var Message : TWMSize);


Procedure WMSock(Var Message : TMessage);

Event Handlers

*** Event Handling


Procedure DoInfo(SocketInfo : TSocketInfo; Msg : String);

Private Support Methods

Convert FRecvAddrIn To A String IP Address


Function GetConnected : Boolean;


Function GetEOF : Boolean;


Function GetRemoteHost : String;

At Design-Time, stDatagram And Listen Are Mutually Exclusive


Function GetText : String;


Procedure SetAutoAccept(Value : Boolean);

Datagram Sockets Only Care About Read Messages


Procedure SetBitmap;


Procedure SetBlocking(Value : Boolean);

SetBlocking Will Set The Asynchronous Mode


Procedure SetConnected(Value : Boolean);


Procedure SetHostName(Value : String);

Property Set/Get Routines

*** Property Set/Get Procedures


Procedure SetListen(Value : Boolean);

Just Call The Send Method And Ignore The Boolean Result


Procedure SetPortName(Value : String);


Procedure SetSocket(Value : TSocket);


Procedure SetSocketType(Value : TSocketType);

Otherwise, We Need To Check To See If It's Already Listening


Procedure SetText(Value : String);

Just Call The Receive Method


Properties


property AutoAccept : Boolean


property Blocking : Boolean


property BlockingTimeout : Integer


property HostName : String


property LineBreak : TLineBreak


property Listen : Boolean


property PortName : String


property SocketType : TSocketType


property Connected : Boolean


property EndOfFile : Boolean

Used To Read FConnected


property RemoteHost : String

RemoteHost Returns The Remote IP If SocketType=stStream And Will Return The Most Recent Incoming Datagram IP If SocketType=stDatagram


property Socket : TSocket


property Stream : TStream


property Text : String


Events


event OnAccept : TNotifyEvent


event OnAutoAccept : TNotifyAutoEvent


event OnConnect : TNotifyEvent


event OnDisconnect : TNotifyEvent


event OnInfo : TNotifyInfoEvent


event OnRead : TNotifyReadEvent


event OnWrite : TNotifyEvent


Variables


FAutoAccept : Boolean;

Do Blocking Calls?


FBlocking : Boolean;

Socket Listens?


FBlockTime : Integer;

Are We Connected?


FBmp_Listen : TBitmap;

UDP Bitmap


FBmp_TCP : TBitmap;

Holder For Design-Time Image


FBmp_UDP : TBitmap;

TCP Bitmap


FCharBuf : Array[1..32768] Of Char;

Listening Bitmap Character Buffer (Most WINSOCK.DLLs Max At 32k


FConnected : Boolean;

Automatically Accept Incomings


FHostName : String;

Line Break Style For Line Input


FInBuffer : String;

Socket Handle


FLastChar : Char;

Address Information Block For RecvFrom


FLineBreak : TLineBreak;

Socket Type (Stream Or Datagram


FListen : Boolean;

Output Buffer For Non-Blocking


FOnAccept : TNotifyEvent;


FOnAutoAccept : TNotifyAutoEvent;


FOnConnect : TNotifyEvent;

Associated TSockStream Object


FOnDisconnect : TNotifyEvent;


FOnInfo : TNotifyInfoEvent;


FOnRead : TNotifyReadEvent;


FOnWrite : TNotifyEvent;


FOutBuffer : String;

Input Buffer


FPicture : TBitmap;

Last Character Read For Line-Input


FPortName : String;

Host Name Or IP Address


FRecvAddrIn : TSockAddrIn;

Address Information Block


FSockAddrIn : TSockAddrIn;


FSocket : TSocket;

Port Name Or Well-Known Number


FSocketType : TSocketType;


FStream : TStream;

How Long To Wait For Blocking Operation