资源描述:
《c语言实的串行通信接口程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C语言实的串行通信接口程序摘要该文介绍了sockets通信原理,从程序员角度着重讨论了公司于1994年4月推出的tcp/ipfordosv2.1.1所提供的开发软件包programmer'stoolkit不仅带有dos下网络编程接口,而且提供了p和ip等多种网络协议之间的通信。socket有三种主要类型:streamsockets,datagramsockets和rasocket接口定义了一种可靠的面向连接的服务,它实现了无差错无重复的顺序数据传输。它通过内置的流量控制解决了数据的拥塞,应用程序可以发送任意长度的数据,将数据当作字节流。datagramsock
2、et接口定义了一种无连接的服务,数据通过相互独立的包进行传输,包的传输是无序的,并且不保证是否出错、丢失和重复。包长度是有限的(隐含长度为8192字节,最大长度可设为32768字节)。rap的直接存取,它主要用于新的网络协议实现的测试等。下面我们通过一个面向连接的传输发生的典型情况来说明socket网络通信的实现。由图我们可以看出,客户机和服务器的关系不是对称的。服务器首先启动,然后在某一时间启动客户机与服务器建立连接。服务器和客户机开始都必须用调用socket()建立一个套接字(socket),然后服务器调用bind()将套接字与一个本地网络地址捆扎在一起,
3、再用调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长度,之后服务器就可以调用accept()来接收连接了。客户机在建立套接字之后,便可以通过调用connect()和服务器建立连接。连接建立后,客户机和服务器之间就可以通过连接发送和接收数据(调用read()和sg,longlevent);它请求sg。它自动地设置套接字s处于非阻塞工作方式。参数levent由表2所列事件的一个或多个组成。t8s10702.gif;表2异步选择网络事件例如,我们要在套接字s读准备好或写准备好时接到通知,可以使用下面的语句:rc=sg,fd-read
4、f
5、d-sg,变量lparam的低字指示网络发生的事件,高字指示错误码。应用程序就可以通过这些信息来决定自己的下一步动作。三、网络实时通信的实现我们来设计一个简单的基于连接的点对点网络实时通信程序。服务器首先启动,它建立套接字之后等待客户机的连接;客户机在启动后,建立套接字,然后和服务器建立连接;连接建立后,客户机通过连接给服务器发送一段数据,服务器接收后又将它发送回来,客户机再发送,如此循环,直至用户命令客户机退出或网络出错;客户机关闭连接和套接字后退出,服务器在检测到连接关闭后,关闭套接字自动结束。我们的实例是unix下基于bsdsocket的服务器程序和-s
6、tart101/*“启动”菜单项标志*/#defineidm-exit102/*“退出”菜单项标志*/#defineum-sock-user+0x100/*用户定义网络消息*/clientmenumenu/*客户机菜单*/beginpopup"server"beginmenuitem"start...",idm-startmenuitem"stop",idm-stopendend#include<p;buffer;sockets=0;/*套接字*/structsockaddr-indst-addr;/*目标地址*/structhostent*hostad
7、dr;/*主机地址*/structhostenthostnm;intcount=0;/*发送接收循环计数器*/客户机程序的窗口主函数很简单,它在注册窗口类、建立窗口后,只是给主窗口函数发送一个用户消息,然后就进入ain(handlehinstance,handlehprevinstance,lpstrlpcmdline,intncmdshosgmsg;lstrcpy((lpstr)server-address,lpcmdline);/*取主机名字*/if(!hprevinstance)if(!initapplication(hinstance))return(
8、false);hinst=hinstance;hdsho-user消息*/postmessage(h-user,()0,(lparam)0);essage(msg,null,null,null)){translatemessage(msg);dispatchmessage(msg);}return(msg.);}主窗口函数clientproc是程序的主要部分,它处理相关的消息:在接到消息-user后,它调用函数-mand时,如果是命令idm-start,则调用子程序client()建立套接字,并试图和服务器建立连接,如果是命令idm-stop,则调用函数-so
9、ck时,它根据参数lparam指示的网