VC++ 与office2007冲突
 使用VS6.0(VC++ or other)打开或添加项目时出现[MSDEV.EXE-应用程序错误"0x73d311c7"指令引用的"0x00000004"内存,该内存不能为"read" ],这个可能是VS6.0和OFFICE 2007有冲突的缘故,下面是解决办法:
首先去下载一个FileTool(​​​http://download.microsoft.com/download/vc60ent/s1/6.0/w9xnt4/en-us/filetool.exe​​ 下载后解压缩),下载过来是一个C++原始文件,需要通过VC编译一下产生一个 FileTool.dll

将这个插件复制到
X:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns

重新打开VC6,Tools->Customize->Add-ins and Macro Files,选中FileTool Developer Studio Add-in即可。

此时打开VC6会有一个浮动工具栏(A O),点击A就是添加文件到工程,点击O就是打开文件。是不是很怪啊,竟然做了一个插件进来,并没有对原先的冲突进行改进。

[单词]
incumbent 在职的,义不容辞的
take the reins 掌握,支配
lawmakers 立法者
endorse 赞同
engagement 约定
seeking 寻找,请求,
consensus 一致意见
rapprochement友好关系恢复
preach 讲道
contest 竞争
campaign 运动,战役,参加竞选
historic 历史上有名的
capacities 容量,容积
ruled out 用直线划掉,宣布。。不可能
tension 紧张
poll 投票
commentator 评论员
woes悲哀
seize 抓住
treaty条约

[VC++ 孙鑫]
1.getdocString.获取各个子串,
第十四课,网络编程
1.协议:两台主机通讯的规则,(语义+语法+规则)
2.端口号:网络应用程序在这个端口号接收,
3.IP地址:4字节,32位,
4.网络体系结构:不同媒价,不同设备,网络系统,不同应用环境,实现互操作性,
5.OSI(open system. interconnection): 抽象的网络参考模型
 物理层:二进制传输,确定在通信信道上如何传送比特流
 数据链路层:介质访问(接入),加强物理层的传输功能,建立一条无差错的网络线路
 网络层:寻址和最短路径,找出最佳的传输线路
 传输层:端到端的连接,隔离网络的上下层协议,使得网络应用与下层协议无关
 会话层:主机间通信 ,在两个相互通信的应用进程之间,建立组织,和协调其相互的通信
 表示层:数据表示,处理被传送数据的表示问题,和数据的语法和语义,使用一种通用的数据格式,进行转换,压缩,解压缩
 应用层:处理网络应用,网络通信功能
6.通信实例的对等层不许直接通信,
 A传输层-B传输层,不能直接通信
各层之间单向依赖
上层使用下层提供的服务-Service user
下层向上层提供服务-Service provider
对等层实体之间虚拟通信 。
实际通信在最低层完成
7.OSI各层使用的层协议
 应用层:telnet,ftp,http,dns,smtp,pop3
 传输层:tcp,udp
 网络层:ip,互联网控制报文层协议icmp,internet组管理层协议igmp
8.数据封装
 发送数据到另一台计算机,必须先打包,这个过程叫封装
 封装就是在数据前面加上特定的协议头部
 协议数据单元(PDU)对等层协议之间交换的信息单元
 为了提供服务,下层把上层的PDU作为本层的数据封装,然后加入本层的头部,头部中含有完成数据传输所需的控制信息
数据自上而下递交的过程就是不断封装的过程,到达目的后,再自下而上不断拆封的过程
物理层上有多层封装
一层只能识别对等层的封装,
9.TCP/IP模型包括四个层次
 应用层--OSI 前三个,应用,表示,会话
 传输层
 网络层
 网络接口--OSI 后两个数据,物理
10,端口
 传输层提供进程(应用程序)通信的能力,为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议商端口概念
 端口:抽象的软件结构(包括一些数据结构和I/O缓冲区)应用程序通过系统调用与某端口建立连接(binding)后,
传输层传给该端口的数据被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。
 端口跟协议相关,tcp,udp各自端口号相互独立,
 端口:16位数字表示,范围0-65535,1024以下保留给预定义,网络应用程序中要使用1024以上的
11.套接字(socket)
 应用程序访问通信协议的操作系统调用socket(套接字),成为开发网络应用程序的非常有效快捷的工具
 socket存在于通信区域(地址族)中,通信区域是一个抽象概念,用于将通过套接字通信的进程的共有特性综合在一起,
 socket只与同一区域的套接字交换数据,跨区通信,必须转换进程,
 windows socket只支持一下通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用
 相当于电话机,通信端点。
12.网络字节顺序
 intelCPU,低位先存,
 tcp/IP 使用16位整数,和32位整数的高位先存格式
 在不同的主机进行通信的过程中,采用网络字节顺序
13.客户机/服务器模式
 定义:客户向服务器提出请求,服务器接上后,提供相应服务。
 网间进程通信完全异步,相互通信的进程不存在父子关系 ,不共享内存缓冲区,因此需要一种机制为希望通信
的进程间建立联系,为二者的数据交换提供同步,这是基于客户机/服务器模式的TCP/IP
 eg:800电话,
 主动请求方式
 服务器先启动,根据请求提供相应服务:
 1.打开一通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求
 2.等待客户请求到达该端口
 3.接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个
客户请求。新进程(线程)处理此客户请求,并不需要对其它请求作出应答,服务完成后,关闭此新进程与客户的通信链路。并终止
 4.返回第二步,等另一客户请求
 5。关闭服务器
 客户方:
 1.打开一通信通道,并连接到服务器所在主机的特定端口
 2.向服务器发服务请求报文,等待并接收应答,继续提出请求。
 3,请求结束后关闭通信通道并终止
14.windows sockets的实现
 windows socket是windows的网络应用程序设计接口,是从Berkley Sockets扩展而来的,以动态链接库的形式提供给我们使用
增加了异步函数,和符合windows消息驱动特性的网络事件异步选择机制。
 基于TCP/IP协议,与协议无关,向下兼容,可使用任何底支传输协议提供的通信能力,

15.套接字类型
 流式套接字:(sock_stream)基于tcp/ip
  提供面向连接,可靠的数据传输服务,数据无差错,无重复,按发送顺序接收
 数据报式套接字(sock_dgram)基于udp
  提供无连接服务,数据以独立包形式发送,接收顺序乱,可能有差错,
 原始套接字(socket_raw)
16.基于tcp(面向连接)的socket编程
 服务器端程序
 1.创建套接字socket
 2.将套接字绑定到一个本地地址和端口上(bind)
 3.将套接字设为监听模式,准备接收客户请求(listen);
 4.等待客户请求到来,当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);(保存了客户端的IP和端口信息)
 5.用返回的套接字和客户端进行通信 (send/recv);
 6.返回,等待另一客户请求
 7,关闭套接字
 客户端程序
 1.创建套接字(socket);
 2,向服务器发生连接请求(connect);
 3,和服务器端进行通信 (send/recv)
 4,关闭套接字
17.基于UDP(面向无连接)的socket编程
 服务器端(接收端)程序:
 1.创建套接字(socket)
 2.将套接字绑定到一个本地地址和端口上(bind)
 3.等待接收数据(recvfrom);
 4.关闭套接字。
 客户端(发送端)程序
 1.创建套接字(socket)
 2.向服务器发送数据(sendto);
 2.关闭套接字。
  

18.加载套接字 wsastartup(1,2)
 1. 用于指定准备加载的winsock库的版本,高位字节指定winsock库的副版 本,低位字节则是主版本,
 makeword(x,y)(x是高位字节)可获得
 2.指向wsadata结构的指针,加载的库版本有关的信息填 在这个结构中
19.socket(地址族1,socket类型2,自动选择合适协议3)返回一个套接字描述符
   bind(要绑定的套接字1,2,3)将本地地址和套接字关联起来
   2,套接字的本地地址信息,指向sockaddr结构的指针变量 ,由于该地址结构是为所有的地址家族准备的,这个结构可能
随使用的网络不同而不同,要用第三个参数指定该地址结构的长度。
 struct sockaddr{
 u_short sa_family;//指定该地址家族,AF_INET
 char sa_data[14];//内存分配区,起到占位的作用,指定与协议相关的具体 地址信息,在tcp/ip中,用sockaddr_in结构替换sockaddr方便填写地址信息
}

 struct sockaddr_in{
 short sin_family;//地址族,对于IP,一直是AF_INET
 unsigned short sin_port;//分配给套搠字的端口,
 struct in_addr sin_addr;//套接字主机的IP地址
 char sin_zero[8];//使sockaddr_in和sockaddr结构的长度一样 调用成功,返回0,失败返回socket_error ,错误信息通过wsaGetlasterror返回
}
 将IP地址指定为inaddr_any,允许套接字向任务分配给本地机器的IP地址发送或接收数据,一台机子可有多网卡,多IP,
 inet_addr(ip)//返回一个适合分配给s_addr的u_long类型的数值,
 inet_ntoa() 完成相反的转换,接受一个in_addr结构体类型的参数并返回一个以点分十进制格式表示的ip
 
sockaddr_in定义变量,给其成员值赋值,
htonl(1)转换一个字节序,从u_long到tcp/ip
指定端口号的时候,要用1024以是的
 两个字节用htons 转化 u_short eg:"端口
 四个字节用htonl 转化 u_long eg:ip
绑定
监听
listen(socket s,int packlog)
 2.设置等待连接的最大长度,
 死循环,让服务器端程序能够持续的运行下去
accept(socket1,指向buffer指针,保存客户端IP,端口2,地址结构长度,必须设初始值3)
接收客户端的变量
recv(s,buf,len,flag);flag,影响recv调用的行为
关闭套接字,释放套接字为我们分配的资源,如果不是死循环,还要关闭SOCKADDR_IN
包含头文件 #inclucde <winsock2.h>
 #include<stdio.h>
链接
 工程-设置-链接 ws2_32.lib 和前面库文件之间要有空格
Header: Winsock2.h.
Link Library: Ws2.lib.

客户端不需要绑定,建立连接connect(1,服务器端地址信息2,3)
定义地址结构体变量
wsacleanup(),终止套接字库的使用

在编写网络应用程序时,都需要先加载套接字库
recvfrom(socket,buf,len,flag,)