《第4 期 李红军 等 Windows Sockets 网络编程 71.pdf》由会员分享,可在线阅读,更多相关《第4 期 李红军 等 Windows Sockets 网络编程 71.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第13卷 第4期武 汉 科 技 学 院 学 报Vo1.13 No.42000年 12月 JOURNAL OF WUHAN INSTITUTE OF SCIENCE AND TECHNOLOGYDec.2000Windows Sockets网络编程李红军 赵玉娇 赵 伟(机械系)(图书馆)(教务处)摘 要 在对Windows Sockcts网络编程作简要介绍的基础上,对在Visual C+6.0环境下如何进行网络编程以及如何使用多线程进行网络编程作了介绍和示范。关键词 网络 套接字 阻塞 多线程 中图分类号 TP 3931WindowsSockets简介Windows sockets(简称Win
2、sock)是微软的窗口系统结构(WOSA)的一部分。它是起源于UNIX上的Berkeley Software Distribution(BSD)版本的套接字、并为Windows进行了专门地扩展。Internet是在UNIX系统上发展起来的,在UNIX上有许多成熟的编程接口,其中最通用的是一种叫做sockets(套接字)的接口。套接字的实质是通信端点的一种抽象,它提供一种发送和接收数据的机制。网络软件商为Windows开发一套标准的、通用的TCP/IP编程接口,并使之类似于UNIX下的sockets,这就是Windows sockets;Windows socket的实现一般都由两部分组成:开发
3、组件和运行组件。开发组件是供程序员开发Winsock应用程序使用的、它包括介绍Winsock实现的文档、Winsock应用程序接口(API)引入库和一些头文件。运行组件是Winsock应用程序接口的动态连接库(DLL),文件名为Winsock.DLL,应用程序在执行时通过装入它来实现网络通信功能。最初,Winsocket1.1版是专门为Internet设计的,现在的2.x版己经不再限于Internet和TCP/IP协议,它通过提供扩展的API编程接口,把自己的应用范围扩大到现存的和正在出现的各种网络和协议,包括PSTN、ISDN、无线网、所有的局域网协议、异步传输模式ATM等等;并且允许应用程
4、序对所建立连接的可靠性、冗余度和带宽进行控制。由此可见,Winsock有着广泛的应用。Windows sockets是Windows下网络编程的规范。这套规范是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。它定义并记录了如何使用API与Internet协议族(IPs、通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows sockets实现都支持流套接字和收稿日期:2000-8-25作者简介:李红军,男,(1974-);武汉,武汉科技学院(430073)1994-2007 China Academic Journal Electronic Publishin
5、g House.All rights reserved.http:/数据报套接字。当我们为客户机/服务器开发一个特殊的应用程序时,我们可以通过套接字来交换我们的数据结构和数据报,以完成应用程序之间的通信。应用程序调用Winsock的API实现相互之间的通讯。Winsock又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图1所示:应用程序1应用程序2网络编程界面,例如Windows Sockets 网络通讯协议服务界面,例如TCP/IP 操作系统,例如Windows 98,Windows NT,Dos 6.22 物理通讯介质图1 应用程序与WinsoCk关系图2 套
6、接字的两种主要形式在Windows套接字中,它主要有两种形式:数据报套接字(Datagram socket)和流式套接字(Stream socket)。流式(也称面向连接方式)套接字采用的是TCP协议,它提供了双向的,有序的,无重复并且无记录边界的数据流服务。在这种方式下,两个通讯的应用程序之间先要建立一种虚拟的连接。流方式的特点是:通讯可靠,对数据有校验和重发的机制,通常用来作数据文件的传输如ftp,telnet等,适合于大量数据的传输。数据报套接字采用的是UDP协议,它建立在IP协议上,提供无连接数据报传输,支持双向的数据流,但并不保证是可靠、有序、无重复的。也就是说,一个从数据报套接字接
7、收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。数据报文方式由于取消了重发校验机制,能够达到较高的通讯速率,可以用作一些对数据可靠性要求不高的遮讯,如实时的语音、图象传输等。另外,数据报套接字支持广播发送,使用setsockopt()函数可以使指定的套接字发送广播消息。相比之下,流式套接字不支持广播发送。是使用流式套接字还是使用数据报套接字,对通信效率影响较大。在编程中,流式套接字与数据报套接字是有区别的。在流式套接字中,服务器首先启动,遮过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定
8、它的请求队列的长度,之后就调用accept()来接收连接。客户在建立套接字后就可调用connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以调用receive()和send()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接字,如图2所示。与流式套接字不同的是,在数据报套接字中,服务器不调用accept(),客户机不调用connect()。在发送数据之前,客户机和服务器之间尚未建立完整相关。无连接服务器通过sockct()和bind()建立了本地半相关,在传输数据之前,无连接的两个端点已建立起来,分别以一个本地socket号和信宿端socket地址。于
9、是,一个完整的相关在数据收发过程中动态地建立起来,实现无连接客户和服务器彼此识别。如图3所示:17第4期 李红军 等:Windows Sockets网络编程 1994-2007 China Academic Journal Electronic Publishing House.All rights reserved.http:/3 在VC下开发套接字程序在实际编程中,我们一般采用面向对象技术,特别采用消息驱动机制实现多任务的Windows编程思想,VC由于它的强大的功能而被广泛采用。3.1 在VC下开发套接字程序的基本步骤在VC+6.0中,我们可以用Windows sockets API来编
10、写网络程序,其特点是十分灵活,可以充分利用众多的Windows sockets API函数,相比之下编程比较烦琐。另外我们可以使用MFC封装的CAsyncSocket和CSocket两个类来进行网络编程,它把与套接字有关的Windows消息转换为回调函数。CAsyncSocket类比CSocket更加面向低层,它提供的低级接口几乎与WinSocket API调用直接对应,使用比较灵活,但它对编程人员的要求也高,需要对网络了解得更多。CSocket是CAsyncSocket的导出类,通过MFC中的CArchive类的对象提供了更高层次的抽象,它封装了socket实现中的许多细节,并将socket
11、与CArchive相结合,使用它与使用MFC中的文档串行化协议相类似,使用便利。CSocket编程的主要步骤如下;(1)构造套接字对象。(2)使用该对象构造基本的套接字。对于CSocket客户端对象,使用缺省参数Creat;对于CSockct服务器对象,应指明一个端口号作为Create的一个参数,用于监听。(3)建立客户端CSocket,调用CAsyncSocket:Connect()建立与服务器端的连接。服务器端套接字调用CAsyncSocket:Listen()监听,并在收到客户端请求后调用CAsyncSocket:Accept()。(4)构造CSocketFile对象,并使Csocket
12、对象与之关联。(5)构造CArchive对象,用于接收或发送数据。(6)使用CArchive对象来进行客户端与服务器端的套接字通信。(7)删除CArchive、CSocketFile、CSocket对象。流程图如图4所示。27 武 汉 科 技 学 院 学 报 2000年 1994-2007 China Academic Journal Electronic Publishing House.All rights reserved.http:/(2)服务器 客户端 CSocket SockSrvr Csocket SockClient;SockSrvr.Create(nPort)SockClie
13、nt.Create();SockSrvr.Listen()SockClient.Connect(saddr,nPort)CSocket sockRew,SockSrvr.Accept(sockrew),CsocketFile file(&SockClient),CSockFile file(&sockrew)CArchive in(&file,Carchive:LOAD)CArchive in(&file,Carchive:LOAD);CArchive out(&file,Carchive:STORE)CArchive out(&file,Carchive:STORE);in dw Value
14、,in dw Value;out dw Value;out mhSocket=(SOCKET)soc.Detach();/开始执行新线程pThread一 ResumeThread();CAsyncSocket:OnAccept(nErrorCode);/处理连接线程(即新线程)的1nitInstance函数,BOO CSockThread:1nitInstance()/把这个套接字句柄附加到新的套接字对象上,/这样主线程的通知函数就能发送到新线程中,在新线程中处理msocket.Attach(m-hSocket);return TRUE:通过以上步骤,我们就可以利用多线程技术来进行网络通信了。
15、47 武 汉 科 技 学 院 学 报 2000年 1994-2007 China Academic Journal Electronic Publishing House.All rights reserved.http:/4 结束语在开发电子教室系统过程中,利用网络编程实现了教师机和学生机之间的连续图像的传输,传输效果相当令人满意。利用CAsyncSocket和CSocket两个类分别实现了网络通信。两个类实现的效果相差无几,由于CSocket类可以使用CArchive对象之间传递数据,使用要方便些。如果能引入多线程技术进行网络通信以避免阻塞的话,那么CSocket将是很好的选择。CAsyn
16、Socket类使用更灵活,不过它需要对网络通信的细节和Windows消息机制有更深入的了解。参 考 文 献1 大卫 必立特(Dwid Bennelt)美.Visual C+5开发人员指南M.北京:机械工业出版社.西蒙与舒斯特国际出版公司,1998.2 张宝社,张宝峰.Windows界面下的网络编程M.合肥:中国科学技术大学出版社.1997.3 曹 方,冯忠义.基于客户/服务器模式的Socket网络编程J.计算机工程.1998,25(2)4 比尔 盖茨.Microsoft Visual studio 6.0 MSDN Library(VC+6.0part).Microsoft公司.1999.5
17、比尔 盖茨.微软网站.http:www.M Sockets Network-programmingLi HongjunZhao YujiaoZhao WeiAbstract:On the base of breif introduction on windows sockets networkprogramming,this paper hasgiven some examples on how to program and use the multithread on the network by Visual C+6.0;Key words:network;sockets;block;mu
18、ltithread(上接第69页)Several Discussion on Executive Stock Option Also on Corporate GovernanceZuo KaiMei NingAbstractThe system of ESO has recceived comprehensive attention as a price-deternining mechanismof an enterprises senior human capital.It is regarded as a way to solve the problem of low-pay and
19、low-incentive which has hampered SOE for thinking years.the practice department has set about reformsfrom ESO.This paper puts questions on this view,it thinks that one single system is not enough inimproving the structure of SOE,the focuses for reforms in SOE should be on the selection of manager.Key words:system of ESO;corporate governance;manager selection system57第4期 李红军 等:Windows Sockets网络编程 1994-2007 China Academic Journal Electronic Publishing House.All rights reserved.http:/