- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用VC的网络编程总结.
使用VC++的网络编程总结
1.套接字编程原理
1.1 Client/server通信模型
1.2 Windows Sockets规范
1.3 套接字
套接字套接字的作用Windows Sockets:带存档的套接字的工作方式
流式套接字通信的操作顺序
使用 CAsyncSocket 类
从套接字类派生
套接字通知
System::Net::Sockets 命名空间Client/server通信模型
在客户/服务器模式中我们将请求服务的一方称为客户(client),将提供某种服务的一方称为服务器(server)。
一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务—对客户的请求作出适当的反应。虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通过无连接的接口提供的。
客户机/服务器的请求/响应过程示意图如下所示。
图1 客户/服务器通信模型
通过上面的分析,我们不难理解一个一个完整的网络应用程序包括客户端和服务器两个部分。客户与服务器进程的作用是非对称的,因此编码不同。服务进程一般是等待客户请求而启动的,只要系统运行,该服务进程一直存在,直到终止或强迫终止。
1.2 Windows Sockets规范
Windows Sockets 规范是90年代初Microsoft公司联合其他几家大公司共同制定的一套在Windows下的二进制兼容网络编程接口。Berkeley大学BSD UNIX中流行的Socket接口为基础,主要在其上扩充了一组针对Windows的扩展库函数,增加了符合Windows消息驱动特性的网络事件异步选择机制,以使程序员能够充分利用Windows消息驱动机制进行编程。
Windows Sockets 的用途是将基础网络抽象出来,这样,您不必对网络非常了解,并且您的应用程序可在任何支持套接字的网络上运行。套接字
套接字套接字是一个通信终结点,它是Sockets 应用程序用来在网络上发送或接收数据包的对象。套接字具有类型,与正在运行的进程相关联,并且可以有名称。目前,套接字一般只与使用网际协议组的同一“通信域”中的其他套接字交换数据。
1.3.2分类
可用的套接字类型有以下两种:
流式套接字
流式套接字提供没有记录边界的数据流,即字节流。字节流能确保以正确的顺序无重复地被送达。
数据报套接字
数据报套接字支持面向记录的数据流,但不能确保能被送达,也无法确保按照发送顺序或不重复。
“有序”指数据包按发送的顺序送达。“不重复”指一个特定的数据包只能获取一次。这两种套接字都是双向的,是可以同时在两个方向上(全双工)进行通信的数据流。
注意???在某些网络协议下(如 XNS),流可以面向记录,即作为记录流而非字节流。但在更常用的 TCP/IP 协议下,流为字节流。Windows Sockets 提供与基础协议无关的抽象化级别。
套接字的作用套接字的作用非常大,至少在下面三种通信上下文中如此:
客户端/服务器模型。
对等网络方案,如聊天应用程序。
通过让接收应用程序将消息解释为函数调用来进行远程过程调用 (RPC)。 类型 含义 缺省值 SO_ACCEPTCON BOOL 套接口正在监听 FALSE SO_BROADCAST BOOL 套接口设置为可发送广播数据 FALSE SO_DEBUG BOOL 允许Debug FALSE SO_DONTLINGER BOOL 是否禁止SO_LINGER选项 TRUE SO_DONTROUTE BOOL 路由被禁止 FALSE SO_ERROR int 得到并且清除错误状态 0 SO_KEEPALIVE BOOL 活跃信息正在被发送 FALSE SO_LINGER struct 返回目前的linger信息 1_onoff SO_OOBINLINE BOOL 带外数据正在普通数据流中被接收 FALSE SO_RCVBUF int 接收缓冲区大小 与具体实现有关 SO_REUSEADDR BOOL 该套接口捆绑的地址可否被他人使用 FALSE SO_SNDBUF int 发送缓冲区大小 与具体实现有关 SO_TYPE int 套接口类型 与接口类型有关 TCP_NODELAY BOOL 禁止采用Nagle进行合并传送 与具体实现有关 可以通过getsockopt()函数获取套接口的属性,也可以通过setsockopt()函数设置套接口的属性。
基本的Windows Sockets API编程
需要在程序中添加下面的包含语句:#includewinsock2.h
使用vc++编译时需添加编译链
文档评论(0)