基于tcp的协议.doc

基于tcp的协议.doc

ID:49849784

大小:120.00 KB

页数:17页

时间:2020-03-03

基于tcp的协议.doc_第1页
基于tcp的协议.doc_第2页
基于tcp的协议.doc_第3页
基于tcp的协议.doc_第4页
基于tcp的协议.doc_第5页
资源描述:

《基于tcp的协议.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于tcp的协议篇一:基于TCP协议的网络程序基于TCP协议的网络程序下图是基于TCP协议的客户/服务器程序的一般流程:图1.1TCP协议通讯流程建立链接的过程:图1.2建立连接的过程服务器调用socket。、bind()、listen。完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connectO发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connectO返回,同时应答一个ACK段,服务器收到后从acceptor回。数据传输的过程:建立连接后,TCP协议提供全双工的通信服务,但是一般的

2、客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的方式。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。关闭链接的过程:图1.3关闭连接的过程如果客户端没有更多的请求了,就调用close

3、()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务器就知道客户端关闭了连接,也调用close()关闭连接。注意,任何一方调用close。后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。在学习socketAPI时要注意应用程序和TCP协议层是如何交互的:*应用程序调用某个socket函数时TCP协议层完成什么动作,比如调用connect()会发出SYN段*应用程序如何知道TCP协议层的状态变化,比如从某个阻塞的socket函数返回就表明TCP协议收到了某些段,再比如read()返回

4、0就表明收到了FIN段先看一下需要用到的函数1NAME2socket・createanendpointforcommunication34SYNOPSIS67#include<sys/types.h/*SeeNOTES*/#include<sys/socket.h81intsocket(intdomain,inttype,intprotocol);0DESCRIPTION1socket()createsanendpointforcommunicationalndreturnsadescriptor.socketQ打开一个网络通讯端口,如果成功的话,就像open()—样

5、返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket。调用出错则返回・1。对于IPv4,family参数指定为AF_INETo对于TCP协议,type参数指定为SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。2NAMEbind-bindanametoasocket56SYNOPSISinclude<sys/types.h/*SeeNOTES*/#include<sys/socket.h79i

6、ntbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。bind()成功返回0,失败返bind()的作用是将参数sockfd和myaddr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听myaddr所描述的地址和端口号。前面讲过,structsockaddr是一个通用指针类型,myaddr参数实际上可以接受多种协议的sockaddr结构

7、体,而它们的长度各不相同,所以需要第三个参数addrlen指定结构体的长度。我们的程序中对myaddr参数是这样初始化的:1bzero(&servaddr9sizeof(servaddr));=AF_INET;htonl(INADDR_ANY);2servaddr.sin_family3servaddr.sinaddr.saddr4servaddr.sin_port=htons(SERV_PORT);首先将整个结构体清零,然后设置地址类型为AFJNET,网络地址为INAD

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。