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

 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. 安装Eclipse Color Theme

    我们都知道eclipse默认的颜色主题是白色的背景,但是如果想改变代码编辑区的背景颜色,需要怎么办呢? 今天给大家介绍一个非常赞的eclipse,可以很方便的根据自己的需求选择喜欢的颜色主题,其他的不 ...

  2. struts2中#,$,%的用法以及el,ognl表达式的用法

    OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例 取Session中的值 <c:out value="${sessionScope.user.userId}&quo ...

  3. StormAPI简单使用

    StormAPI .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",& ...

  4. Javascript的数组操作[转]

    1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); // 结果 a:[2,3,4 ...

  5. CakePHP 2.x 升级3.0

    CakePHP 2.x => 3.x 升级手顺 一.Controller层 1.find('list') 原2.x中该方法通过指定option中的'fields'来实现key=>value ...

  6. 对手机SD卡的一些操作

    首先要导入外包 log4j-1.2.16.jar 代码如下: package com.car273.util; import java.io.BufferedReader; import java.i ...

  7. Android之CookieStore的持久化

    CookieStore是一个对象,有的服务端 ,比如.net,保持登录状态不是用httpclient.addHeader(“cookie”,SessionId),而是用httppost.setCook ...

  8. hdu5461 Largest Point(沈阳网赛)

    Largest Point Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...

  9. 仅仅需手动添加一行代码就可以让Laravel4执行在SAE (v. 1.0.0)

    Github:https://github.com/chariothy/laravel4-sae (已更新至v1.1.0) laravel4-sae (v. 1.0.0) 仅仅需手动添加一行代码就可以 ...

  10. pwd显示链接文件的真实路径

    1.pwd用于显示当前工作路径 2.pwd -P 用于显示当前的实际工作路径(主要用于链接文件) 加参数难以了理解,看个例子就明白了: 进入链接文件,pwd显示的是链接文件所在的路径,而你不是链接文件 ...