当前位置:
文档之家› windows程序设计.ppt
windows程序设计.ppt
TCP/IP是面向连接的协议。连接的两个设备之间。每一 方都使用自己的IP地址和端口号。通常,一方称为客户, 另一方称为服务器。 客户是发送请求方,服务器响应它们。 服务器通常是等待客户连接,这叫监听,这一般是在特定 的IP地址和端口号进行。 服务器和客户方都需要使用IP地址和端口号。服务器的通 常是固定的。
Windows程序设计基础
第八章TCP/IP和网络通信
•8.1网络基础知识
网络是可以交换数据的互相连接的计算机的集合。
LAN(Local Network)
WAN(Wide Area Network) Internet 协议是一组规定,它描述了数据传送的格式以及如何 通过网络交流数据.
网络是建立在协议之上的.
3.传输控制协议层 IP之上是TCP层,这层离网络应用程序非常近。TCP 为寻址增加了最后一个限制----端口号。 IP地址用来寻址指定的计算机或者网络设备,而端口号涌 来确定运行在目的计算机上的哪个应用程序应该接收这个 封包。端口号是16位的,范围:0---65536之内。 TCP层关心传输是否成功,要确保数据正确的到达。也让 接收者控制数据流动,数据丢失,TCP重发。
int WSAStratup( WORD wVersionRequested,//应用程序支持的最高Winsock版本,
//高字节为次版本号,低字节为主版本号。
LPWSADATA lpWSAData//一个指向WSADATA结构的指针。用来返
//回DLL库的详细信息。
);
调用函数成功返回0。否则调用WSAGetLastError函数查 看出错的原因。
它必须对应调用下面函数释放Winsock库:
int WSACleanup(void);
•套节字的创建和关闭
使用套节字之前,必须调用socket函数创建一个套节字对象, 此函数调用成功将返回套节字句柄。
•以太网(Ethernet)
1.介质访问控制层 以太网的最底层,硬件层。网卡属于该层,包括了串行 网络接口和一个控制器.控制器帮助将原始数据转换为电子 信号,并发送到正确位置. MAC地址:48位的标识. 在最底层通过MAC号进行寻址.
2.网际协议层 寻址方式:IP地址。 IP地址通过软件分配给网络接口,这时会将IP地址和网络 接口的MAC地址关联在一起。为了使用IP寻址,关联的 MAC地址需要保存起来。这由ARP负责。每个主机都维护 了一个记录IP和MAC地址对的清单。如果用户使用的IP 地址没有在此清单中,主机会发出一个询问到局域网中的 其它计算机,以获取与之相匹配的MAC地址。如果此局域 网中有计算机可以识别此IP地址,它送回对应的MAC地址, 如果没有,封包就会被送到网关—发送封包到外部网络的 计算机。
•8.2Winsock接口
Winsock是处理网络的Windows API . •套节字的概念和类型 通信双方要建立连接,这个连接的终端就是套节字。客户 端和服务器都有一个套节字。每个套节字都和特定的IP地 址和端口号关联。 几乎所有的Winsock函数都在套节字上进行操作,因为套 节字是到连接的句柄。连接的两端都要使用一个套节字, 他们与平台无关。套节字是双通的,即同一个套节字既能 够接收也能够发送数据。
字节顺序:长度跨越多个字节的数据被存储的顺序。
TCP/IP协议统一使用大尾方式传输数据,也称为网络字 节顺序。
•Winsock编程流程
1. Winsock库的装入、初始化和释放 所有Winsock函数都是从WS2_32.DLL库导入的。 VC++默认情况下并没有连接到该库。如果想使用 Winsock API,就必须包含相应的库文件. #pragma comment(lib,”wsock32.lib”) WSAstratup必须是首先调用的Winsock函数。允许应用程 序指定所需的Windows Sockets API版本,获取特定 Winsock实现的详细信息。仅当这个函数成功执行之后, 应用程序才能调用其它Winsock API版本。
4.软件层 TCP之上是网络软件。在Windows下,应用程序不 直接访问TCP层,而是通过Winsock API访问。 软件层提供了非常方便的访问网络的方式。由于所有下层 协议的存在,在软件层不必担心封包、封包大小、数据错 误、对丢失包的重发等。
•以太网接口堆栈
如图是以太网接口堆栈中每个协议的封装形式。他们都是 从软件层开始的。软件层包含了用户请求发送的数据,有 时这块数据会有固定的格式。用户数据首先取得包含源端 口号和目的端口号的TCP头。然后添加IP头,它包含发送 者和接受者的IP地址。最后数据链路层添加以太网头,它 指定了发送者和接收者的MAC地址,这是真正通过电缆发 送的数据。
以太网接口堆栈
用户
软件层 TCP层 IP层 链路层 Ethernet header MAC User data Tcp header User data IP header Tcp header User data IP header Tcp header User data
硬件
•服务器/客顺序
寻址方式:通用方式---IP地址和端口号
Struct sockaddr_in{ short sin_family;//地址家族(即指定地址格式) u_short sin_port;//端口号 struct in_addr sin_addr;//IP地址 char sin_zero[8];//空字节,设为0 }
•8.2Winsock接口
套节字的类型:
流套节字(SOCK_STREAM):为需要可靠连接的应用程序 设计。这些程序经常使用连续的数据流。协议是TCP。一些 众所周知的协议HTTP、TCP、SMTP、POP3等都使用它。 数据报套节字(SOCK_DGRAM):无连接的。有一个最大缓 冲区大小(数据包大小的最大值)。它是为那些需要发送小数 据包,并且对可靠性要求不高的应用程序设计。不保证数据 会到达终端,也不保证是正确的顺序到来。传输效率相当高。 经常用于音频或视频应用程序。