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 这两个类协同工作的接口。其中
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 最新章:第28章