关 闭

新闻中心

EEPW首页>工控自动化>设计应用> Windows平台下的网络异步通讯编程技术

Windows平台下的网络异步通讯编程技术

作者: 时间:2012-04-28 来源:网络 收藏

3 使用CAsyncSocket类的通讯流程
在理解了上述的机制后,CAsyncSocket的通信流程:客户方在使用CAsyncSocket::Connect()时,往往返回一个WSAEWOULDBLOCK的错误,实际上这不应该算作一个错误,它是Socket的提醒,由于使用了非阻塞Socket方式,所以操作需要时间,不能瞬间建立。那么可以等待,等待连接成功,于是许多程序员就在调用Connect()之后,Sleep(0),然后不停地用WSAGetLastError()或者CAsyncSocket::GetLast Error()查看Socket返回的错误,直到返回成功为止。这是一种错误的做法,断言不能达到预期目的。事实上,可以在Connect()调用之后等待CAsyncSocket::OnConnect()事件被触发。类似地,Send()如果返回WSAEWOULDBLOCK错误,在OnSend()处等待,Receive()如果返回WSAE WOULDBLOCK错误,则在OnReceive()处等待,具体的内部通信流程如图2所示。

本文引用地址://m.amcfsurvey.com/article/202341.htm

c.JPG



4 使用CAsyncSocket编程的程序框架
在进行C/S编程之前,需在定义应用程序行为的文件030 303.cpp中的Initlnstance()函数里调用AfxSocketInit()函数来初始化Wind ows Sockets。
(1)服务器端
以public的方式从CAsyncSocket类派生新类CServerSock,并重载OnAccept、OnReceive、OnSend函数。
函数重载完成后,在主窗口构造新的CServeSock对象,用来监听来自客户机的连接,添加代码如下:
CServeSock m_ListenSock;//m_ListenSock为监听套接字
m_ListenSock.Create(m_Port,SOCK_STREAM,FD ACCEPT|FD_READ|FD_WRITE|FD_CLOSE)
m_ListenSock→Listen(int nConnectionBacklog=5);
函数Send()的参数说明:
nconnectionBacklog:等待连接的最大队列长度。
此时服务器开始监听来自客户机的连接请求。
(2)客户机端
以public的方式从CAsyncSocket类派生新类CClientSock,与服务器端类似,重载OnReceive()、OnSend()函数。
已经搭建好使用CAsyncSocket类实现基于TCP协议的异步通讯的框架,具体的应用程序可以在此基础上进行丰富与修改。

5 结束语
CAsyncSocket类为使用Socket提供了方便。建立Socket的WSAStartup过程和bind过程被简化成为Create过程,IP地址类型转换、主机名和IP地址转换的过程中许多复杂的变量类型都被简化成字符串和整数操作,特别是CAsyncSocket类的异步特点,完全可以替代繁琐的线程操作。MFC提供了大量的类库,若能灵活地使用,可大大提高编程效率。

tcp/ip相关文章:tcp/ip是什么



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭