基于CS结构的网络通信原理的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
处于准备接收状态,同时规定它的请求队列长度,随 后调用Accept()来接收客户连接,服务器进入阻塞 状态。客户在打开套接字后,通过调用CoIIIlect()和 服务器建立连接,一旦连接建立,客户就可和服务器
万方数据
2007年第8期
赵专政:基于c/S结构的网络通信原理的实现
105
进行数据传输直至传输结束。 对于uDP而言,服务器调用R优讵砌()使自己
和Csocket类。CA唧nSocket类封装了Windo啪socket AH,提供了较低层的与Win80ck的接口;CSocket类
继CA承喊了keCtA类sy中nS一0c些ket较类难中控一制些的常A用PI的函删数函和数成,员并函对
数进行了处理,它通过MFc C触hive对象来操作信
息的传送。使用Csocket类的编程步骤如下: (1)构造CS0cket类对象,如:CSocket sen,ers.)ck.
式如下:
R艚uh=a瑚∞t(80c虹h明池,您脚沧8ddIe髓。瓢ld瞄s
l朗gIll) 参数90cket-h舳dle返回S0cket描述符,聆I∞te—
add陀鸽是远程socket地址,指向S0cket地址结构,
addre鸽jengtll是地址的长度。 无连接协议的程序不需要建立连接。在服务器
端,无论使用无连接协议或面向连接协议都必须对协 议端口进行侦听。Socket API中的bind函数将一个 本地地址和一个Socket联系起来。调用语句如下:
表l S∞kH接口的传送函数和接收函数
传送函数(seIld)
SeIld Write W矗tev
连接类型(’rype) 连接(coIIIlection)
连接(Co肿ection)
连接(C咖ecti∞)
接收函数(Receive)
Recv Read Readv
Sendto Sendnl89
无连接(Unco叻ected) 无连接(Unco硼ected)
类似于文件描述符的句柄。例如:
80cl∞t—lllmdle=80cket(pmt∞ol—f砌ly,80cket—t)rpe,
pl咖01)
此函数需要规定三个参数:协议簇(pmtocolj抽- ily)、socket类型和协议。协议簇(p删Dcol』蛐坶)参 数确定一组相关的协议,如TCP/IP协议组,S0cket类
坤8lllt=b砌(∞cket—lIandle.1∞al一8∞k一“№嘲,Bd- dI嘲lengtll)
建立服务器时,应将服务器设计成等候客户的请
求,.I℃P/lP传输层通过协议端口和应用程序进行通 信。
(3)数据的传输与接收。
建立并设置了80cket属性后,利用表l中所列函 数进行数据的传送和接收。
(虚电路)和无连接的(数据报)两种通信模式进行了比较,并详细介绍了VC++中使用cs∞kd类的缟程步骤。
关键词:socket;网络通信;鳊程
中图分类号:1P393
文献标识码:A
hnplemen协廿蚰of Ne细ork Comm吼i∞廿佃Pr疵iple B教d佃C/S Comtr眦廿明
Z姒O zllu肌·小eIlg
tlle po阴瑚·
m沁砒ep8 usillg C80cket ch88 ill vc++.

K留words:Sockct;neⅧ|olI【咖mllIlic砒i∞;pl_0l即衄
1 Socket编程原理
Socket8(又称为wiIlsock或window8 S0ckets), 是Windows基于ISO参考模型的网络连接规范。它 在传输层建立网络接口部件,是一个woSA(win- dow8 Open service8 ArchitectIl把)类型的部件,并提供 网络传输服务,是应用程序与网络之间的一种通用标
(7)使用CArchive在客户端和服务器端的应用
程序服之间务进器行端数:据S传e融输>,>使Da用汜形;式s如em下rA:加<<D啦l;
客户端:cli佣认rIII>>Datal;Cli咖tAroIlt<<D眦也;
(8)在客户端和服务器端的数据传输完毕之后, 分别在两边销毁刚才创建的CS0cket,CS∞ketFile和 CA北hive类对象o
联系的CS∞l【e师le类对象,以便以后传输数据使用。
使用的形式如下: 服务器端:Csocke婀le
S鲫rers|∞ketF.丑e(蹦妇腻ket);
客户端:CSocketFne ClientsI∞ketFne(&Clients∞ket);
(6)在客户端和服务器端分别创建一个与各自
socke删e相联系的CArehive类,以便通过它们进行
Recvf如m
Rt圮m89
其中write和∞ndto函数的格式如下:
瑚uh=write(80cket—haIldle,嗍8a西e—buⅡh,bllⅡh—
lengtlI)
其中me8sage-bu艉r指向包含传输信息的数据缓
冲区硝;ubhu=肠蝴rdjteong(t嫩IIk指el明—数I龇据d缓le冲,区m的∞大晔小一。嗡,bu钕一
2007年第8期 文章编号:1006-2475(200r7)08旬103J03
计算机与现代化 JIsUANⅡYU XIANDAIHUA
基于C/S结构的网络通信原理的实现
总第144期
赵专政
(中南大学信息科学与工程学院,湖南长沙410083)
摘要:讨论了应用网络连接规范S∞kets实现远程通信的基本原理,分析了基于c/S网络系统的通信过程,对面向连接的
图1应用程序之间的接口关系 1.1利用socket进行网络通信
要进行网络通信,就必须在网络对话的每一端都 建立一个S∞ket。两个S0cket之间的连接可以是面 向连接的,也可以是无连接的。对于面向连接的 Socket,在数据传输时可以使用字节流的形式,而无 连接的情况下可以使用数据报的数据传输形式。 S0cket接口模型采用“打开一读一写一关闭”方式,因
lengtIl,叩ecil fla轳,o∞ketJIddre88咖lc—t11地。Bddres0 s眦tu圯
jengtll) 1.2 C/S网络编程实现框架
Socket同时支持面向连接的(虚电路)和无连接 的(数据报)两种通信模式,所对应的socket分别为 数据流sock—S吮锄和数据报sock—G眦n。数据流 8∞ket采用的是传输控制协议TcP。lI℃P提供的是面 向连接的数据流传输,提供高可靠性数据传输服务。 适合信息安全要求较高的信息传输。数据报socket 采用的是用户数据报协议uDP(u∞r Dall呵咖P∞珏 c01)。它是建立在IP协议之上的,提供无连接的不 可靠的数据报传输。
et;CSocket ClientS0cketo
(2)使用CSocket对象的C陀ate()函数创建WiIl— do鹏socket,Create()函数会调用BiIld数将此S∞ket 绑定到指定的地址上。
如:Se刑堰Sock醴.C揪她(5000);//服务器的端口号是 50∞
Cli蚰tsocket.CDe砒e();
阻塞,等待客户发来的数据包而不是连接。客户并不 和服务器建立连接,而是调用sendt0()直接发送包含 服务器地址的数据报。
2 Windows Sockets编程步骤
Wi-融k规范定义了一个在,I℃P/疋网络上开发 耽dow8程序的标准,Wjnsock是以动态连接库DLL
来实现socket接口的。 图4给出了Winsock在Window8软件开发环境
detailed涮p‰0f 咖mIlIIic幽啮,饥d锄Ialy8∞the湖mIllIi谢∞8 pro嘲8 k晦ed mI G,S networIc syBtem.TIli8 plIpe肾伽棚p|I瞄tlle呐∞m删-
c胡咖珊讨e18耐ented colm蒯锄(vimlal ci弛llit)蚰d∞n∞ctionle鹳(data胂m),winl a
收稿日期:2006舶.10 作者简介:赵专政(19r75一),男,湖南益阳人。湖南城市学院讲师,中南大学信息科学与工程学院硕士研究生。研究方向:计算
机网络与应用。
万方数据
104
计算机与现代化2007年第8期
此为了建立一个TCP/IP网络通信,首先要建立网络
的连接,接着通过该连接读和写数据,最后程序必须
ຫໍສະໝຸດ Baidu
接请求。在服务器端通过调用Accept()函数来创建
一个和监听Socket相同的连接S∞ket来处理客户的
请求,而原来的Socket仍处于监听状态。使用的形式
如下:服务器靖:CSock融lte槐触k既;Semr
(蜘他);
Sock税.A∞ept
客户端:cli即tsocket.c0眦ect();
(5)在客户端和服务器端分别创建一个与之相
两种通信模式的时序图如图2和图3所示。
服务器
图2无连接的S∞km通信时序图
鞭备■
图3面向连接的S∞ket通信时序图
由图2和图3可以看出。客户机与服务器的关系 是不对称的,不管是数据流方式还是数据报方式,都 是服务器先启动,然后在某个时刻客户主动发出请 求,服务器被动应答。
对于代P而言,服务器再调用Ks融t()使套接字
中的位置,试n9Dck.皿位于1℃P/IP协议栈和应用程 序的中问层,WirlSock管理应用程序与.I℃P/IP协议 之间的接口。
两络数据线
电话线入口
图4 WiI曷0cI【在珊蜘编程环境中的地位
装。在 MFVCC中++有6. 两种0的类M支FC持中W,ir提lS供oc了k:对CS蛳0cSk∞etk的 et封 类
(CoⅡe鲈0f M函瑚6∞晒eI啪&E晒neeli唱,C钮昀l South Ulli啷蚵,cha喇m 41∞83,Chi矾)
Ah由麓ct:T1li8删cle di∞岫湖tbe印p_K洲叩afintem帆n∞60n毒t蛐daId∞cke伯∞∞hieVe the b∞ic洳ipl∞0fl仇lg—distaII∞
通信服双务方器数端据:的c^发施送s臼与M接触收I(。艇幻使艘用S形OI式妇如t胁下,:C^舶::
10ad);0客虹户蚯"端se:册刑洲h帕0皿a(i殛咖’灿欺他I(f&sIcd‰舭。碰o沁b僦姗№e:,:c虹^e舶);::
蛐);
CAI℃I面佗Qi硎AIQI吐(&ai删s0出虹讹,c^lcld他::8t0把);
关闭这个连接。当建立一个socket时,必须规定 Sock或的特性,并使用一个API函数给出一个标识 Socket的旬柄。以下是基于VC实现的Socket原型。
(1)Socket的建立。
当设计基于TCP/IP的网络软件时,既可以使用
面向连接的协议,也可以使用无连接的协议。S0cket 接口通过一个socket连接使用这两种类型的协议。 为了建立S0cket,程序调用socket函数,并返回一个
胁删ng 准接口。Socket接口是’rCP/IP中的API(Application hte舭e),它分为数据报套接字(D她
gram S∞kets)和流式套接字(s№蛐S∞ket8),它实际 上是网络通信的一个端点,用户所开发的S∞ket应用 程序可以通过网络与其它S∞ket应用程序进行通信,
通信的基础就是S0cket。socket也是一种文件描述 符,它的数据传输是一种特殊的L,0(Inpu∥outImt)。 Socket具有一个类似于打开文件的函数调用S∞ket (),该函数返回一个整型的S0cket描述符,随后的建 立连接、数据传输等操作都是通过调用该S∞ket实现 的。其与应用程序之间的接口关系如图l所示。
(3)Socket创建完毕后,在服务器端进行监听客
户的连接请求。
如se刑!rsock醴.L妇蚰(5);//其中5表示的是待处理的 连接队列所允许达到的最大长度是5
(4)对于服务器而言,在这一步将调用Accept ()函数对客户发来的请求进行接收和处理。而对于
客户而言,则会调用Co硼∞t()函数向服务器发出连
CAmhive,CS∞ke峭le,和CS∞ket三者之间的关 系如图5所示。
图5 a妣,岱0cl幽和csodcet三者之间的关系图
型参数(80ckeL哆pe)指明socket是面向连接还是无
连接,协议参数(pm妣01)指出使用的具体协议。
(2)Socket的配置。 建立S0cke£后,按照S0cket的用途进行配置。 如S0cket传输数据时,可以用字节流或数据报。面向
连接网络传输使用co唧ect()函数来配置S0cket。格
相关文档
最新文档