网络编程书籍讲义(第八讲).ppt
《网络编程书籍讲义(第八讲).ppt》由会员分享,可在线阅读,更多相关《网络编程书籍讲义(第八讲).ppt(22页珍藏版)》请在三一办公上搜索。
1、1,人民邮电出版社,第8章 TCP程序设计,2,8.1 TCP网络程序设计模型,8.1.1服务器端工作流程基于C/S结构的程序在工作时,服务器端的应用程序应该首先启动,以等待客户的服务请求。其具体工作流程可以分为以下八个步骤:第一步:使用WSAStartup()函数检查系统协议栈的安装情况。只有在协议栈正确安装的情况下,才可以执行以下的各步骤。常用的调用格式有如下两种:WSAStartup(0 x0202,&wsaData);WSAStartup(MAKEWORD(2,2),&wsaData);注意:这里所使用的Winsock为2.2版,也可以使用其它版本的Winsock。第二步:使用sock
2、et()或WSASocket()函数创建服务器端通信的套接口。如果套接口创建不成功,也不能执行以下的各操作,并且要调用WSACleanup()函数,结束Windows Sockets API的使用。这一步调用过程确定了相关五元组的协议。常用的调用格式有如下几种:,3,8.1 TCP网络程序设计模型,8.1.1服务器端工作流程SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,0);SOCKET serverSocket=WSASock
3、et(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED);SOCKET serverSocket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);注意:调用不成功时返回INVALID_SOCKET。,4,8.1 TCP网络程序设计模型,8.1.1服务器端工作流程第三步:使用bind()函数将创建的套接口与服务器地址绑定。它确定了相关五元组中的本地IP地址和端口号。常用调用格式:bind(serverSocket,(const struct sockaddr
4、*)&localaddr,sizeof(sockaddr);bind(serverSocket,(SOCKADDR*)&localaddr,sizeof(sockaddr);bind(serverSocket,(sockaddr*)&localaddr,sizeof(sockaddr);bind(serverSocket,(LPSOCKADDR)&localaddr,sizeof(sockaddr);注意:本机地址有多种表示方法,它们是等价的。第四步:使用listen()函数使服务器套接口做好接收连接请求的准备。该函数的调用格式如下:listen(serverSocket,queuelen);
5、注意:第二个参数是请求队列的长度,用以限制排队请求的客户数,它与协议的实现有关,一般给queuelen赋值为5。,5,8.1 TCP网络程序设计模型,8.1.1服务器端工作流程第五步:使用accept()或WSAAccept()函数接收来自客户端由connect()发出的连接请求。常用格式:SOCKET Newsock=accept(serverSocket,(struct sockaddr*)&clientaddr,&clientaddr_len);该函数的参数中,由参数clientaddr返回客户端协议、IP地址和端口信息,至此一个通信所需的五元组已建立。第六步:连接建立连接后,使用sen
6、d()或WSASend()函数发送数据,或使用recv()或WSARecv()函数接收数据。具体使用实例见下节的实例程序。第七步:使用closesocket()函数关闭套接口。它的使用方法很简单:closesocket(serverSocket);,6,8.1 TCP网络程序设计模型,8.1.1服务器端工作流程第八步:最后调用WSACleanup()函数,结束Windows Sockets API的使用。它是一个无参函数,在程序中直接调用即可:WSACleanup();至此,服务器的工作过程结束。当然实际的服务器程序是比较复杂的,这里只是对它的基本流程进行了说明。,7,8.1 TCP网络程序设
7、计模型,8.1.2客户端工作流程客户端相对服务器端来说,其工作过程较为简单。客户端应用程序的工作流程如下:第一步:使用WSAStartup()函数检查系统协议栈的安装情况。其调用格式与服务器端调用格式类似:WSAStartup(0 x0202,&wsaData);WSAStartup(MAKEWORD(2,2),&wsaData);第二步:使用socket()或WSASocket()函数创建客户端套接口。其调用格式同服务器端调用格式类似:SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);,8,8.1 TCP网络程序设计模型,
8、8.1.2客户端工作流程第三步:使用connect()或WSAConnect()函数发出与服务器建立连接的请求。常用格式如下:connect(clientSocket,(struct sockaddr*)&serveraddr,sizeof(serveraddr);如果客户想连接的计算机没有监听指定端口的进程,则请求连接的connect()调用就会失败,并发生代码为WSAECONNREFUSED的错误。另一种常见的错误代码是WSAETIMEDOUT,这种情况一般发生在试图连接的计算机不能使用时,如客户与要连接的服务器之间路由不通、服务器主机硬件故障或者服务器不在网络上等。,9,8.1 TCP网
9、络程序设计模型,8.1.2客户端工作流程注意:serveraddr参数是指向远程服务器地址的一个指针,因此在调用此函数前一定要知道远程服务器的地址和端口号,并把其值赋给serveraddr结构量,否则无法使用该函数。第四步:连接建立后,使用send()或WSASend()函数发送数据,或使用recv()或WSARecv()函数接收数据。第五步:使用closesocket()函数关闭套接口。第六步:最后调用WSACleanup()函数,结束Windows Sockets API的使用。至此,一次客户向服务器请求服务的过程结束。,10,8.1 TCP网络程序设计模型,8.1.3服务器与客户机通信过
10、程第7章我们讨论过服务器与客户通信的过程要用一个五元组来标识。这个五元组是:(协议,本地IP地址,本地端口号,远程IP地址,远程端口号)。对于面向连接的(TCP协议)通信来说,服务器与客户机之间的连接建立完成后,这个五元组就建立了,如表8-1所示。,11,8.1 TCP网络程序设计模型,8.1.4基于TCP协议的网络程序框架服务器与客户机进行的上述通信过程可以用图8-1表示。,关闭TCP连接,用三次握手过程建立TCP连接,交换数据,交换数据,WSAStartup(),socket(),listen(),accept(),等待客户连接请求的到来,recv(),send(),closesocket
11、(),WSACleanup(),socket(),connect(),WSAStartup(),send(),recv(),closesocket(),WSACleanup(),图8-1面向连接的客户机-服务器程序工作模型,bind(),12,8.2TCP实例程序1,实例程序说明在Internet协议中,有一个名叫Daytime的非常简单的协议,这个协议由RFC 867定义,它用于返回服务器当前时间和日期。Daytime服务器应用程序忽略客户机发送的任何数据,只是检查本地时钟,并用字符串的形式返回当前日期与时间,客户机可以对取得的这个字符串进行处理,取得有关日期和时间。Daytime协议虽然很
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 书籍 讲义 第八

链接地址:https://www.31ppt.com/p-5301408.html