欢迎来到天天文库
浏览记录
ID:40239751
大小:1.41 MB
页数:104页
时间:2019-07-28
《Windows网络编程 罗莉琴 詹祖桥 第5章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows网络编程实用教程授课教师:职务:第4章Socket编程基础课程描述在开发网络应用程序时,最重要的问题就是如何实现不同主机之间的通信。在TCP/IP网络环境中,可以使用Socket接口来建立网络连接、实现主机之间的数据传输。本章将介绍使用Socket接口来编写网络应用程序的基本方法。本章知识点Socket协议原理WinSock编程基础面向连接的Socket编程面向非连接的Socket编程套接字选项5.1Socket协议原理5.1.1Socket协议的工作原理5.1.2Socket的服务方
2、式和类型5.1.1Socket协议的工作原理在网络应用程序中,实现网络通信的必要条件:(1)拨打电话的一方需要知道对方的电话号码。如果对方使用的是内部电话,则还需要知道分机号码。而被拨打的电话则不需要知道对方的号码。(2)被拨打的电话号码必须已经启用,而且将电话线连接到电话机上。(3)被拨打电话的主人有空闲时间可以接听电话,如果长期无人接听,则会自动挂断电话。(4)双方必须使用相同的语言进行通话。这一条看似有些多余,但如果真的一个说汉语、另一个却说英语,那也是没有办法正常沟通的。(5)在通话过程中,
3、物理线路必须保持通畅,否则电话将会被挂断。(6)在通话过程中,任何一方都可以主动挂断电话。基于TCP协议的两个网络应用程序进行通信的基本过程(1)客户端(相当于拨打电话的一方)需要了解服务器的地址(相当于电话号码)。在TCP/IP网络环境中,可以使用IP地址来标识一个主机。但仅仅使用IP地址是不够的,如果一台主机中运行了多个网络应用程序,那么如何确定与哪个应用程序通信呢。在Socket通信过程中借用了TCP和UDP协议中端口的概念,不同的应用程序可以使用不同的端口进行通信,这样一个主机上就可以同时有
4、多个应用程序进行网络通信了。这有些类似于电话分机的作用。(2)服务器应用程序必须早于客户端应用程序启动,并在指定的IP地址和端口上执行监听操作。如果该端口被其他应用程序所占用,则服务器应用程序无法正常启动。服务器处于监听状态就类似于电话接通电话线、等待拨打的状态。(3)客户端在申请发送数据时,服务器端应用程序必须有足够的时间响应才能进行正常通信。否则,就好像电话已经响了,但却无人接听一样。在通常情况下,服务器应用程序都需要具备同时处理多个客户端请求的能力,如果服务器应用程序设计得不合理或者客户端的访
5、问量过大,都有可能导致无法及时响应客户端的情况。(4)使用Socket协议进行通信的双方还必须使用相同的通信协议,Socket支持的底层通信协议包括TCP和UDP两种。在通信过程中,双方还必须采用相同的字符编码格式,而且按照双方约定的方式进行通信。这就好像在通电话的时候双方都采用对方能理解的语言进行沟通一样。(5)在通信过程中,物理网络必须保持畅通,否则通信将会中断。(6)通信结束后,服务器端和客户端应用程序都可以中断它们之间的连接。Socket编程的层次结构5.1.2Socket的服务方式和类型在
6、Socket通信中,套接字分为3种类型,即流式套接字(SOCK_STREAM)、数据报式套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)。1.流式套接字流式套接字提供面向连接的、可靠的数据传输服务,可以无差错地发送数据。传输数据可以是双向的字节流,即应用程序采用全双工方式,通过套接字同时传输和接收数据。应用程序可以通过流传递有序的、不重复的数据。所谓“有序”指数据包按发送顺序送达目的地址,所谓“不重复”指一个特定的数据包只能获取一次。如果必须保证数据能够可靠地传送到目的地、并且数据量很
7、大时,可以采用流式套接字传输数据。文件传输协议(FTP)即采用流式套接字传输数据。2.数据报式套接字比较项目流式套接字数据报式套接字建立和释放连接√×保证数据到达√×按发送顺序接收数据√×通讯数据包含完整的目的地址信息×√3.原始套接字原始套接字是公开的套接字编程接口,使用它可以在IP层上对套接字进行编程,发送和接收IP层上的原始数据包,例如ICMP、TCP和UDP等协议的数据包。5.2WinSock编程基础5.2.1构建WinSock应用程序框架5.2.2IP地址的表示形式5.2.1构建WinSo
8、ck应用程序框架WinSock包含两个主要的版本,即WinSock1和WinSock2。在使用WinSock1.1时,需要引用头文件winsock.h和库文件wsock32.lib,代码如下:#include#pragma comment(lib, "wsock32.lib")在VisualStudio2005中,通常使用WinSock2.2实现网络通信的功能,则需要引用头文件winsock2.h和库文件ws2_32.lib,代码如下:#incl
此文档下载收益归作者所有