{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

 Author:       Fran鏾is PIETTE
Object: Demo program to show how to use TWSocket object is a very
simple server program. This server just wait for a client to
connect, then send 'Hello'. When the user click on the
disconnect button, the client is disconnected.
Creation: September 19, 1996
Version: 2.02
EMail: francois.piette@overbyte.be http://www.overbyte.be
Support: Use the mailing list twsocket@elists.org
Follow "support" link at http://www.overbyte.be for subscription.
Legal issues: Copyright (C) 1996-2010 by Fran鏾is PIETTE
Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56
<francois.piette@overbytet.be> This software is provided 'as-is', without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software. Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely, subject to the following
restrictions: 1. The origin of this software must not be misrepresented,
you must not claim that you wrote the original software.
If you use this software in a product, an acknowledgment
in the product documentation would be appreciated but is
not required. 2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source
distribution. Updates:
Mar 19, 1997 Use enhanced TWSocket object
Sep 06, 1997 Beautified
Aug 20, 1999 V2.02 Changed comment to correctly talk about interface use. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit OverbyteIcsSrv5; {$J+} interface uses
SysUtils, Windows, Messages, Classes, Graphics,
Controls, Forms, Dialogs, OverbyteIcsWSocket, Winsock, StdCtrls,
OverbyteIcsWndControl; type
TServerForm = class(TForm)
SrvSocket: TWSocket;
InfoLabel: TLabel;
CliSocket: TWSocket;
DisconnectButton: TButton;
procedure SrvSocketSessionAvailable(Sender: TObject; Error: Word);
procedure FormShow(Sender: TObject);
procedure DisconnectButtonClick(Sender: TObject);
procedure CliSocketSessionClosed(Sender: TObject; Error: Word);
procedure FormCreate(Sender: TObject);
procedure SrvSocketBgException(Sender: TObject; E: Exception;
var CanClose: Boolean);
end; var
ServerForm: TServerForm; implementation {$R *.DFM} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TServerForm.FormShow(Sender: TObject);
const
FirstTime : Boolean = TRUE;
begin
if FirstTime then begin
FirstTime := FALSE; { Do it only once ! }
SrvSocket.Addr := '0.0.0.0'; { Use any interface }
SrvSocket.Listen; { Start listening for client }
InfoLabel.Caption := 'Waiting for client';
end;
end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{* This event handler is called once a client has connected the server. *}
procedure TServerForm.SrvSocketSessionAvailable(Sender: TObject; Error: Word);
var
NewHSocket : TSocket;
PeerName : TSockAddrIn;
Peer : String;
begin
{ We need to accept the client connection }
NewHSocket := SrvSocket.Accept; { And then associate this connection with our client socket }
CliSocket.Dup(NewHSocket); { Wants to know who is connected to display on screen }
CliSocket.GetPeerName(PeerName, Sizeof(PeerName)); { User likes to see internet address in dot notation }
Peer := IntToStr(ord(PeerName.sin_addr.S_un_b.s_b1)) + '.' +
IntToStr(ord(PeerName.sin_addr.S_un_b.s_b2)) + '.' +
IntToStr(ord(PeerName.sin_addr.S_un_b.s_b3)) + '.' +
IntToStr(ord(PeerName.sin_addr.S_un_b.s_b4));
InfoLabel.Caption := 'Remote ' + Peer + ' connected'; { Send a welcome message to the client }
CliSocket.SendStr('Hello' + # + #); { Enable the server user to disconect the client }
DisconnectButton.Enabled := TRUE;
end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{* This event handler is called once the user clicks on Ddisconnect *}
procedure TServerForm.DisconnectButtonClick(Sender: TObject);
begin
CliSocket.ShutDown(); { Shut the communication down }
CliSocket.Close; { Close the communication }
end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{* This event handler is called once the client connection is broken. *}
{* Either by the client or the server. *}
procedure TServerForm.CliSocketSessionClosed(Sender: TObject; Error: Word);
begin
DisconnectButton.Enabled := FALSE;
InfoLabel.Caption := 'Waiting for client';{ Inform the user }
end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} procedure TServerForm.FormCreate(Sender: TObject);
begin end; procedure TServerForm.SrvSocketBgException(Sender: TObject; E: Exception;
var CanClose: Boolean);
begin end; end.
 
 

最近一直在学习关于网络 cs方面的东西,写个小博客作为笔记吧。

delphi ICS控件示例解读的更多相关文章

  1. Delphi WebBrowser控件的使用(大全 good)

    Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application      如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDis ...

  2. <总结>delphi WebBrowser控件的使用中出现的bug

    Delphi WebBrowser控件的使用中出现的bug:  1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowse ...

  3. 修改Delphi工具控件的默认字体

    修改Delphi工具控件的默认字体: 注册表: Delphi 6:    HKEY_CURRENT_USER\Software\Borland\Delphi\6.0Delphi 7:    HKEY_ ...

  4. Delphi TcxtreeList控件说明 转

    Delphi TcxtreeList控件说明   树.cxTreeList 属性: Align:布局,靠左,靠右,居中等 AlignWithMargins:带边框的布局 Anchors:停靠 (akT ...

  5. delphi按钮控件的default属性

    delphi按钮控件的default属性用于设置默认命令按钮,.设置为true时,按[Enter键]相当于用鼠标单击了该按钮 .窗口中如果有多个按钮的default是true的话,就根据tabinde ...

  6. asp.net模板控件示例

    原文:asp.net模板控件示例 模板控件允许将控件数据与其表示形式相分离,模板化控件不提供用户界面. 编写它则是为了实现一个命名容器以及包含属性和方法可由宿主页访问的类,MSDN是这样解释的. 下面 ...

  7. Delphi fmx控件在手机滑动与单击的问题

    Delphi fmx控件在手机滑动与单击的问题 (2016-03-08 10:52:00) 转载▼ 标签: it delphi 分类: Delphi10 众所周知,fmx制作的app,对于象TEdit ...

  8. React Native 教程:001 - 如何运行官方控件示例 App

    原文发表于我的技术博客 本文主要讲解了如何运行 React Native 官方控件示例 App,包含了一些 React Native 的基础知识以及相关环境的配置. 原文发表于我的技术博客 React ...

  9. Delphi maskedit控件的掩码含义及用法方法

    Delphi maskedit控件的掩码含义及用法方法   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

随机推荐

  1. 关于Centos Linux系统安装Python的问题

    由于最近在研究Python框架Django的使用,安装django扩展没有问题 新建项目  django-admin startproject projectName  如果什么都不修改或者直接创建一 ...

  2. Android SQLite系列

    转:http://blog.csdn.net/liuhe688/article/details/6715983 Android中如何使用SQLite. 现在的主流移动设备像Android.iPhone ...

  3. 加载loading的ajax写法

    ajaxStart()与ajaxStop():当Ajax请求开始时,会触发ajaxStart()方法的回调函数.当Ajax请求结束时,会触发ajaxStop()方法的回调函数.这些方法都是全局的方法, ...

  4. IP地址、子网掩码和地址分类

    http://blog.csdn.net/bluishglc/article/details/47909593?utm_source=tuicool&utm_medium=referral 实 ...

  5. MAC环境下生成Apple证书教程

    在MAC操作系统下,生成Apple证书比较简单,全图形化操作. 一.使用Keychain Access(钥匙串访问) MAC操作系统对证书的处理都采用了“Keychain Access”(中文系统名为 ...

  6. 21. 无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务”

    无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务” 原因:调用存储过程的方式有问题,必须用JDBC方式调用存储过程才可以正常 ...

  7. delphi 线程池基础 TSimplePool

    1. TSimpleThread 2. TSimpleList 3. 以1,2构成 TSimplePool 用法 先定义: TDoSomeThingThread=class(TSimpleThread ...

  8. C语言入门(10)——if分支语句

    在我们写的函数中可以有多条语句,但这些语句总是从前到后顺序执行的.除了从前到后顺序执行之外,有时候我们需要检查一个条件,然后根据检查的结果执行不同的后续代码,在C语言中可以用分支语句实现,比如: if ...

  9. Choosing Between ElasticSearch, MongoDB &amp; Hadoop

    An interesting trend has been developing in the IT landscape over the past few years.  Many new tech ...

  10. C#深复制和浅复制

    本文在于巩固基础 我们来看看什么是深复制.浅复制: C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于 ...