资源描述:
《有关c语言实的串行通讯接口程序 》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、有关C语言实的串行通讯接口程序摘要该文先容了sockets通讯原理,从程序员角度着重讨论了公司于1994年4月推出的tcp/ipfordosv2.1.1所提供的开发软件包programmer'stoolkit不仅带有dos下X络编程接口,而且提供了p和ip等多种X络协议之间的通讯。socket有三种主要类型:streamsockets,datagramsockets和rasocket接口定义了一种可靠的面向连接的服务,它实现了无差错无重复的顺序数据传输。它通过内置的流量控制解决了数据的拥塞,应用程序可以发送任意长度的数据,将数据当作字节流。datagramsocket接口定义了一种
2、无连接的服务,数据通过相互独立的包进行传输,包的传输是无序的,并且不保证是否出错、丢失和重复。包长度是有限的(隐含长度为8192字节,最大长度可设为32768字节)。rap的直接存取,它主要用于新的X络协议实现的测试等。下面我们通过一个面向连接的传输发生的典型情况来说明socketX络通讯的实现。由图我们可以看出,客户机和服务器的关系不是对称的。服务器首先启动,然后在某一时间启动客户机与服务器建立连接。服务器和客户机开始都必须用调用socket()建立一个套接字(socket),然后服务器调用bind()将套接字与一个本地X络地址捆扎在一起,再用调用listen()使套接字处于一种
3、被动的预备接收状态,同时规定它的请求队列长度,之后服务器就可以调用accept()来接收连接了。客户机在建立套接字之后,便可以通过调用connect()和服务器建立连接。连接建立后,客户机和服务器之间就可以通过连接发送和接收数据(调用read()和write())。最后,待数据传送结束,双方调用close()封闭套接字。t8s10700.gif;面向连接的协议实现的socket调用图二、winsock对socket的扩充bsdsocket支持阻塞(blocking)和非阻塞(non-blocking)两种工作方式。在阻塞方式下,connect()、accept()、read()和r
4、ecv()等调用在执行时都处于阻塞状态直到它成功或出错返回。在非阻塞方式下,这些调用是立即返回的,但是它们是否完成得靠查询才能知道。对于windows这种非抢先多任务操纵系统来说,这两种工作方式都是难以接受的,为此,winsock在尽量与bsdsocket保持一致的条件下,又对它作了必要的扩充。winsock对bsdsocket的扩充主要是在基于消息、对X络事件的异步存取接口上。表1列出了winsock扩充的函数功能。从表1可以看出,winsock的扩充功能可以分为如下几类。(1)异步选择机制异步选择函数wsaasyncselect()答应应用程序提名一个或多个感爱好的X络事件,所
5、有非阻塞的X络i/o例程(如send()和resv()),不管它是已经使用还是即将使用,都可作为wsaasyncselect()函数选择的候选。当被提名的X络事件发生时,windows应用程序的窗口函数将收到一个消息,消息附带的参数指示被提名过的某一X络事件。t8s10701.gif;表1winsock扩充函数功能(2)异步请求例程异步请求例程答应应用程序用异步方式获取请求的信息,如wsaasyncgetxbyy()类函数答应用户请求异步服务,这些功能在使用标准berkeley函数时是阻塞的。函数wsacancelasyncrequest()答应用户终止一个正在执行的异步请求。(3
6、)阻塞处理方法winsock在调用处于阻塞时进进一个叫“hook”的例程,它负责处理windows消息,使得windows的消息循环能够继续。winsock还提供了两个函数(wsasetblockinghook()和wsaunhookblockinghook())让用户能够设置和取消自己的阻塞处理例程。另外,函数wsaisblocking()可以检测调用是否阻塞,函数wsacancelblockingcall()可以取消一个阻塞的调用。(4)出错处理为了和以后的多线索环境(如sg,longlevent);它请求sg。它自动地设置套接字s处于非阻塞工作方式。参数levent由表2所列
7、事件的一个或多个组成。t8s10702.gif;表2异步选择X络事件例如,我们要在套接字s读预备好或写预备好时接到通知,可以使用下面的语句:rc=sg,fd-read
8、fd-sg,变量lparam的低字指示X络发生的事件,高字指示错误码。应用程序就可以通过这些信息来决定自己的下一步动作。三、X络实时通讯的实现我们来设计一个简单的基于连接的点对点X络实时通讯程序。服务器首先启动,它建立套接字之后等待客户机的连接;客户机在启动后,建立套接字,然后和服务器建立连接;连接建立