空心雨毕业论文网是专业的论文代写网站,提供毕业论文、职称论文、硕士论文、计算机论文等的代写服务,同时还提供各种期刊的论文发表。如果你有需要,请联系我们QQ:5599630;电话:13350726595;E-mail:singlehearted@vip.qq.com
RSS
 

C语言实的串行通信接口程序(2)

来源:okxy168 作者:

(4)出错处理
为了和以后的多线索环境(如windows nt)兼容,winsock提供了两个出错处理函数wsagetlasterror()和wsasetlasterror()来获取和设置本线索的最近错误号。
(5)启动与终止
winsock的应用程序在使用上述winsock函数前,必须先调用wsastartup()函数对windows sockets dll进行初始化,以协商winsock的版本支持,并分配必要的资源。在应用程序退出之前,应该先调用函数wsacleanup()终止对windows sockets dll的使用,并释放资源,以利下一次使用。
在这些函数中,实现windows网络实时通信的关键是异步选择函数wsaasyncselect()的使用,其原型如下:int pascal far wsaasyncselect(socket s,hwnd hwnd, unsigned intwmsg, long levent);它请求windows sockets dll在检测到在套接字s上发生的levent事件时,向窗口hwnd发送一个消息wmsg。它自动地设置套接字s处于非阻塞工作方式。参数levent由表2所列事件的一个或多个组成。
@@t8s10702.gif;表2 异步选择网络事件@@
例如,我们要在套接字s读准备好或写准备好时接到通知,可以使用下面的语句:
rc=wsaasyncselect(s,hwnd,wmsg,fd-read | fd-write);
当套接字s上被提名的一个网络事件发生时,窗口hwnd将收到消息wmsg,变量lparam的低字指示网络发生的事件,高字指示错误码。应用程序就可以通过这些信息来决定自己的下一步动作。
三、网络实时通信的实现
我们来设计一个简单的基于连接的点对点网络实时通信程序。服务器首先启动,它建立套接字之后等待客户机的连接;客户机在启动后,建立套接字,然后和服务器建立连接;连接建立后,客户机通过连接给服务器发送一段数据,服务器接收后又将它发送回来,客户机再发送,如此循环,直至用户命令客户机退出或网络出错;客户机关闭连接和套接字后退出,服务器在检测到连接关闭后,关闭套接字自动结束。
我们的实例是unix下基于bsd socket的服务器程序和windows下基于winsock的客户机程序之间的通信。服务器在主机unix下直接运行,前台和后台均可;客户机在windows下运行,带一个参数,即主机的名字。如win client rs6000,rs6000是在hosts文件中已定义好的主机名。
我们先看客户机程序,首先定义几个宏、菜单资源和部分全局变量。
程序1:部分windows程序源代码(宏、菜单和变量)
#define userport 3333/*用户定义端口号*/
#define idm-start101/*“启动”菜单项标志*/
#define idm-exit102/*“退出”菜单项标志*/
#define um-sockwm-user 0x100/*用户定义网络消息*/
clientmenu menu/*客户机菜单*/
begin
popup "&server"
begin
menuitem "&start...", idm-start
menuitem "&stop",idm-stop
end
end
#include <winsock.h>/*必须包含winsock.h头文件*/
handlehinst;
charserver-address = {0};/*服务器地址缓冲区*/
charbuffer;/*接收发送缓冲区*/
char far *lpbuffer=&buffer;
sockets=0;/*套接字*/
struct sockaddr-in dst-addr;/*目标地址*/
struct hostent *hostaddr;/*主机地址*/
struct hostent hostnm;
intcount=0;/*发送接收循环计数器*/
客户机程序的窗口主函数很简单,它在注册窗口类、建立窗口后,只是给主窗口函数发送一个用户消息,然后就进入windows消息处理循环。
程序2:部分windows程序源代码(窗口主函数)
int pascal winmain(handle hinstance, handle hprevinstance, lpstr lp
cmdl
ine, int ncmdshow)
{
hwnd hwnd;
msgmsg;
lstrcpy((lpstr) server-address, lpcmdline);/*取主机名字*/
if (!hprevinstance)
if (!initapplication(hinstance))
return (false);
hinst=hinstance;
hwnd=createwindow("clientclass","windows echo client",
ws-overlappedwindow,cw-usedefault,cw-usedefault,
cw-usedefault,cw-usedefault,
null,null,hinstance,null);
if (!hwnd)
return (false);
showwindow(hwnd,ncmdshow);
updatewindow(hwnd);
/*给主窗口函数发送wm-user消息*/
postmessage(hwnd,wm-user,(wparam) 0,(lparam) 0);
阅读更多内容<<上一页 · 1 · 2 · 3 · 4 · 5 · 下一页>>
10
最新评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
      本站是由一个众多学科的博士群体组建而成,主要创办者为成都各重点高校博士。本论文网内理工科写手均为博士,文科类写手大部分为博士,且领域涵盖广泛,写作势力强大,若有部分专业,没有相关的写手,我们给你寻找合适的写手! 依托强大的人力资源,我们本着诚心交流的宗旨,专门为您排解写作上的难题。从在科研及实践工作中稳扎稳打的经历,我们具备了研究问题,解决问题的能力。论文写作和论文发表,作为教育体系的一个重要环节,我们确实有能力给您解决好问题,正所谓,真金不怕火来炼,请相信我们的势力,没有把握的事,我们不会做!
      本站受多家期刊委托,其中包括国家级中文核心期刊目录正刊,CSSCI目录正刊,增刊,省级以上公开出版的优秀期刊正刊,本站负责论文推荐发表,加急1个月即可发表。本站负责论文发表,不发表承诺退款!!目前主要负责法律,管理,经济,理工,农学,行政,医学,艺术,英语等类论文发表论文代写。详细期刊目录见本站相关内容。
赞助商链接