本栏目责任编辑:冯蕾网络通讯及安全
Computer Knowledge and Technology 电脑知识与技术 第 5 卷第 4 期 (2009 年 2 月)
客户端与服务器端的 Socket通信
夏玲,王伟平
(中南大学 信息科学与工程学院,湖南 长沙 410083)
摘要:介绍有关网络客户服务模型的 socket 通信应用,采用 delphi 中对 Windows API 进行了完美封装的套接字组件,设计了一个实
现面向连接的通信方式的实际例子,说明两者是如何进行通信。
关键词:socket;delphi;通信;客户端;服务器端
中图分类号:TP393 文献标识码:A1 文章编号:1009-3044(2009)04-812-02
The Socket Communication about Client and Server
XIA Ling, WANG Wei-ping
(School of Information Science and Engineering, Central South University, Changsha 410083,China)
Abstract: Customer service on the network model of the socket communications applications, using the Windows API delphi in the per-
fect package for the socket components, a design-oriented means of communication linking the actual example, to explain how they are
communicating.
Key words: socket; delphi; communication; client; server
1 引言
大部分网络协议的实现都由客户端(Client)和服务器端(Server)来协作完成。 这种模型本质上涉及两个不同的程序,通常这两个
程序在不同机器上运行。 这些机器之间都有网络连接。 服务器端程序提供服务并对来自客户程序的请求作成响应。 而客户端程序
则是在使用者和服务器端程序之间建立某种沟通的渠道,或者是作为使用服务器端提供的某种网络服务的工具。
一个典型的服务器与客户机之间的交互可能如下所示:
1) 客户机提出一个请求;
2) 服务器收到客户机的请求,进行分析处理;
3) 服务器将运行处理的结果返回给客户机。
通常一个服务器需要向多个客户机提供服务。因此对服务器来说,还需要考虑如
何有效地处理多个客户的请求。
2 服务器与客户端的 Socket 通信类型
Socket 的连接类型可以分为两种,分别是面向连接的字节流类型(Sock_stream)和
面向无连接数据报类型(Sock_dgram)。
面向无连接数据报类型的 Socket 工作流程比较简单,双方不需要进行太多的沟
通与交互。客户机直接将用户的请求打包发送到服务器端,省略了建立一个固定信息
通道的过程。服务器端也是直接将处理的结果发送给客户端。每个发送的数据报都携
带有传递所需要的所有地址信息。 其工作流程如图 1 所示。
面向连接的字节流类型的 Socket 工作中有比较严格的操作次序, 工作的原理也
比较复杂。 在这种类型的 Socket 的工作过程中, 必须首先启动服务器端, 通过调用
socket()函数建立一个 Socket 对象,然后调用 Bind()函数将该 Socket 对象和本地网络
地址绑定到一起。再调用 Listen()函数使该 Socket对象处于侦听状态,并规定它的最大
请求的数量。 其工作流程如图 2所示。
总的来说,无连接和面向连接的通信方式各有长处和短处。在仅仅涉及少量的信
息传递的场合可以使用无连接操作; 如果涉及大量信息传递的场合可以采用面向连
接操作。
3 Delphi 的 Socket 组件
3.1 Delphi 中 Socket 的操作方式
根据连接发起的方式以及本地 Socket 要连接的目标,Socket 之间的连接可以分
为:客户端连接、监听连接以及服务器端连接。
Delphi 分别使用 ClientSocket 组件 和 ServerSocket 组件 来操纵客户端
Socket 和服务器端 Socket 的连接和通信。 ClientSocket 组件为客户端组件。 它是通信
的请求方,也就是说,它是主动地与服务器端建立连接。 ServerSocket 组件为服务器端
组件。 它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请
求,并对请求进行回复。 ServerSocket 组件可以同时接受一个或多个 ClientSocket 组件
收稿日期:2008-12-24
图 1 无连接 Socket 操作流程
图 2 面向连接 Socket 操作流程
ISSN 1009-3044
Computer Knowledge and Technology 电脑知识与技术
Vol.5,No.4,February 2009, pp.812-813
E-mail: info@cccc.net.cn
http://www.dnzs.net.cn
Tel:+86-551-5690963 5690964
812
网络通讯及安全本栏目责任编辑:冯蕾
的连接请求,并与每个 ClientSocket 组件建立单独的连接,进行单独的通信。
3.2 ServerSocket 的属性设置
·Port 是通信的端口,必须设置。 在本文实例中设置为 95;
·ServerType 服务器端读写信息类型,设置为 stThreadBlocking 表示异步读写信息,本文实例中采用这种方式。
·ThreadCacheSize,客户端的最大连接数,就是服务器端最多允许多少客户端同时连接。 本文实例采用默认值 10。
3.3 ClientSocket 的属性
·Port,是通信的端口,必须与服务器端的设置相同。 否则可能导致两个组件发送的目标端口和接收的端口不一致,无法建立有
效的信息传送连接。
·ClientType,客户端读写信息类型,应该与服务器端的设置相同,为 ctNonBlocking 表示异步读写信息.
·Host,客户端要连接的服务器的 ip 地址。 必须设置,当然也可以在代码中动态设置。
4 应用实例
4.1 设计思路
实例包括一个服务器端程序与一个客户端程序。 客户端程序可以放到多个计算机上运行,同时与服务器端进行连接通信。
服务器程序实现以下基本功能:1) 在用户登录的时候记录用户登录所在主机的 IP、 主机名称等;2) 显示当前在线用户数量;3)
可对当前在线用户执行注销、重启、关机等操作。
客户端程序实现一些基本功能:1) 显示当前程序的工作状况;2) 实现服务器端发送的注销、重启、关机的操作。
4.2 程序说明
根据功能的实际需要,服务端程序一运行,窗体的 StringGrid 控件就显示已在线用户的基本信息。
代码如下:
procedure TfrmServer.displayconnectionsinfo ; //在 stringgrid 中显示在线用户数据
Var i: integer;
begin
listbox1.Items.Clear;
with ServerSocket1 do
begin
if (length(arrayconnectionstatus)>=1) then
stringgrid1.RowCount:=length(arrayconnectionstatus)+1
else
stringgrid1.RowCount:=2;
with stringgrid1 do
begin
for i:= 0 to high(arrayconnectionstatus) do
begin
with arrayconnectionstatus[i] do
begin
cells[0,i+1]:=inttostr(tcsactiveconnections);
cells[1,i+1]:=' '+tcsremotehost;
cells[2,i+1]:=' '+tcsremoteaddress;
cells[3,i+1]:=' '+inttostr(tcsremoteport);
cells[4,i+1]:=' '+tcslocalhost;
cells[5,i+1]:=' '+tcslocaladdress;
cells[6,i+1]:=' '+inttostr(tcslocalport);listbox1.items.Add(tcsremotehost);end;end;end;end;
end;
在窗体上,“执行”按钮的 Click 事件负责向指定的在线用户或全体在线用户发送注销、重启、关机操作指令。
客户端程序通过通信端口接收指令,并做出响应,弹出关机提示对话框,如需要继续使用计算机的在线用户,可点击“取消”按钮。
5 结束语
综上所述,Socket 组件相比其它高级协议组件如 FastNet 组件,它的封装层次较低,程序员可以在它们的基础上自己定义新的高
级协议或者是规定自己的信息交互流程。 利用以上代码,进一步拓展的余地也很大,还可以加入一些更细化的功能,如局域网在线
聊天、点对点传输文件等。
参考文献:
[1] 赵秀英.Delphi 网络高级编程[M].北京:人民邮电出版社?,2001.83-85.
[2] 申普兵,行明顺,王兆祥,等.计算机网络与通信[M].北京:人民邮电出版社,2006.9-11.
[3] 王丰锦,邵新宇.基于 SOCKET 和多线程的应用程序间通信技术
的研究[J].计算机应用,2000,20(6):65-67.
[4] 谢希仁.计算机网络[M].第 4版.北京:电子工业出版社,2003.100-
113.
[5] 计世网 .统一通信的五大技术热点 [EB/OL]. http://tech.c114.net/
166/a275630.html.
[6] 谢安明 ,邵美珍 .使用 Socket 设计网络通讯程序 [EB/OL]. http://
www.cnki.com.cn/Article/CJFD2001-XXGC200101019.htm.
[7] 曹伟.基于网络的远程控制系统[D].长春:吉林大学,2005.
夏玲(1982-),女,江西吉安市人,福建南平铝
业有限公司工程师,中南大学信息科学与工程
学院计算机科学与技术专业工程硕士在读生,
研究方向:计算机网络信息安全与通信技术。
王伟平(1969-),女,中南大学信息科学与工程学院教授,研
究方向:网络与信息安全、匿名通信技术和网络管理。
813
本文档为【客户端与服务器端的Socket通信】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。