友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第107章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




   o  addrlen :addr 参数的长度。  

    如果成功,则返回一个新的套接字,它对应于已经接受的那个客户机连接。对于该客户 

机所有的后续操作,都使用这个新的套接字。原来的套接字则仍处于监听模式,继续接受其 

他客户机的连接。如果失败,则返回 INVALID_SOCKET 。  



11。2。5    监听 socket  



   对于服务器端来说,在它接受客户机的连接之前,首先要监听。只有进入了监听模式, 

才能接受来自客户机的连接。这一点可以通过 listen()函数实现,它的原型如下:  



   int listen(SOCKET s; int backlog);  



    各参数意义如下。  

   o  s:进行监听的套接字。  

   o  backlog :正在等待连接的最大队列的长度。如果 backlog  的值为 3,有 4 个客户机同 

     时发出连接请求,则前 3 个会放在等待连接队列中,最后一个将被忽略。  

    如果函数成功,则返回 0 ;否则返回 SOCKET_ERROR。  



11。2。6    数据传输  



    当客户机和服务器的连接建立起来以后,便可以进行数据的传输。数据的传输是网络通 

信的最终目的,前面所作的工作就是为了客户机可以和服务器传输数据。数据传输又包括数 

据发送和数据接收。  



    1.数据发送  



   数据发送是通过 send()函数来实现的,它的原型如下:  



   int send(SOCKET s; const char FAR *buf; int len; int flags );  



    各参数意义如下。  

   o  s:已经建立连接的套接字。  

   o  buf :字符缓冲区,区内包含即将发送的数据。  

   o  len :缓冲区内的字符数目。  

   o  flags:指定数据传输方式,取值可为 0、MSG_DONTROUTE 和 MSG_OOB ,或者是 



 ·284 ·  


…………………………………………………………Page 296……………………………………………………………

                                                           第 11 章    网络编程  



     这些取值进行按位或运算的结果。其中,0 表示无特殊行为;MSG_DONTROUTE  表 

     示传输层不要将它发出的包路由出去;MSG_OOB 表示数据应该被带外发送。  

    如果发送成功,则返回发送的字节数,如果失败则返回 SOCKET_ERROR。  



    2 .数据接收  



    数据接收通过函数 recv()实现,其原型如下:  



    int recv(SOCKET s; const char FAR *buf; int len; int flags );  



    各参数意义如下。  

    o  s:准备接收数据的套接字。  

    o  buf :指向即将接收数据的字符缓冲区的指针。  

    o  len :缓冲区的大小。  

    o  flags:指定传输控制方式,取值可为 0、MSG_PKKE 和 MSG_OOB ,或者是这些取值 

     进行按位或运算的结果 。其中,0 表示无特殊行为;MSG_PKKE 表示把数据从接收端 

      口复制到接收缓冲区中,并且没有从系统缓冲区中将数据删除;MSG_OOB 表示数据 

      是带外发送的。  

    如果接收成功,则返回接收的字节数,如果失败则返回 SOCKET_ERROR。  



11。3    WinSock 类  



    在上一节中简单介绍了直接利用 WinSock API 进行网络传输的基本步骤以及主要函数的 

使用方法,而实际利用 Visual  C++  6。0 开发网络应用程序的时候,很少直接利用这些 API 进 

行编程,因为 MFC  已经把这些 API 都封装到 MFC 提供的类中了。本节将详细介绍在网络编 

程中经常用到的 MFC 提供的两个类,即 CAsyncSocket 类和 CSocket 类。它们的继承关系如 

图 11…1 所示。  



                                                



                   图 11…1    CAsyncSocket 类和 CSocket 类的继承关系  



11。3。1    CAsyncSocket 类  



    CAsyncSocket 类在很低的级别上封装了 Windows Socket API ,该类可以使程序员用面向 

对象的方法进行 Socket 编程,而且可以非常方便地调用其他 MFC 对象。这个类要求程序员 

对 Socket 编程有较为深入的了解,要面对和在直接使用 Windows Socket API 进行程序设计时 

一样的问题,如阻塞处理、网络字节顺序等。因为 CAsyncSocket 类几乎是一一对应地封装了 

Windows Socket API ,因此具有直接调用 WinSock API 的灵活性。  

    要使用一个 CAsyncSocket 对象,则先调用它的构造函数,然后调用 Create()函数,以创 

建一个套接字句柄(SOCKET 类型)。CAsyncSocket 对象既可以在栈中,也可以在堆中。对 



                                                                    ·285 ·  


…………………………………………………………Page 297……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



于一个服务器套接字调用  Listen()成员函数进行监听,对于一个客户套接字调用  Connect()成 

员函数来请求连接。在接收一个连接请求时,服务器套接字应该调用一个  Accept() 函数来接 

收连接请求。完成之后,如果 CAsyncSocket 对象在栈中构造,则当对象超出范围时,会自动 

调用析构函数;如果是在堆上被创建的,必须调用 delete 来删除此对象。  

    CAsyncSocket 类的主要成员函数如表 11…3 所示。  



    表 11…3               CAsyncSocket 类主要成员函数及说明  



         函数                                    说明  

 CAsyncSocket         构造函数  

 Create               创建一个 Socket  

 Attach               对 CAsyncSocket 对象附加套接字句柄  

 Detach               从 CasyncSocket 对象除去套接字句柄  

 FromHandle           返回 CasyncSocket 对象的指针,给出套接字句柄  

 GetLastError         获得上一次运行失败的状态  

 GetPeerName          获得与套接字连接的对等套接字的地址  

 GetSockName          获得套接字的本地名  

 GetSockOpt           获得套接字选项  

 SetSockOpt           设置套接字选项  

 Accept               接受套接字上的连接  

 AsyncSelect          请求对于套接字的事件通知  

 Bind                 给套接字绑定本地地址  

 Close                关闭套接字  

 Connect              与对等套接字建立连接  

 IOCtl                控制套接字模式  

 Listen               建立套接字,侦听即将到来的连接请求  

 Receive              从套接字接收数据  

 ReceiveFrom          接收数据报并且存储资源地址  

 Send                 给连接套接字发送数据  

 SendTo               给特定目的地发送数据  

 ShutDown             使套接字上的 Send 和/或 Receive 调用无效  

 OnAccept             通知侦听套接字,它可以通过调用 Accept ,接受挂起连接请求  

 OnClose              通知套接字,关闭对它的套接字连接  

 OnConnect            通知连接套接字,连接尝试已经完成,无论成功或失败  

 OnOutOfBandData      通知接收套接字,在套接字上有带外数据读入,通常是忙消息  

 OnReceive            通知侦听套接字,通过调用 Receive 恢复数据  

 OnSend               通知套接字,通过调用 Send,它可以发送数据  



    除了上面的成员函数,CAsyncSocket 类还有一个数据成员 m_hSocket ,它是一个 SOCKET 

句柄,记录了 CAsyncSocket 类上附加的套接字。  



11。3。2    CSocket 类  



    CSocket 类是  CAsyncSocket 类的派生类,它最大的特点是提供了可以同                  CArchive 和 

CSocketFile  这两个类协同工作的接口。其中  
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!