字体
第(2/4)页
关灯
   存书签 书架管理 返回目录
 数据接收通过函数recv()实现,其原型如下:

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

    各参数意义如下。

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

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

    ? len:缓冲区的大小。

    ? 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 的灵活xìng。

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

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

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·286·

    于一个服务器套接字调用Listen()成员函数进行jiān tīng,对于一个客户套接字调用Connect()成

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

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

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

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

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

上一页 目录 下一页