TCP协议网络通信设计方案与实现_第1页
TCP协议网络通信设计方案与实现_第2页
TCP协议网络通信设计方案与实现_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作者: Pan Hongliang基于 TCP 协议下的简单网络通信与实现摘要本文设计并实现了在 Windows 下基于局域网内的 TCP 协议的简单即时通信系统, 系统 采用 TCP/IP 模式,底层通信通过 SOCKET 套接字接口对端口进行监听, 当有消息发送来时, 做出相应的处理,服务器负责客户端的登录验证。本文首先讨论了套接字创建、绑定、将套 接字设置为监听模式、接受信息和关闭套接字从而实现简单的网络通信,然后阐述了如何使 用C+来模拟基于TCP协议下的客户服务方式的网络通信过程。由于在此设计中主要是使用C程序的形式来模拟 TCP协议的传输方式,从而实现面向对象的可靠传输,在这种情况

2、下无需对 IP 协议进行讨论。关键字:套接字 TCP 协议目录1、引言 .1.1 、课程背景 1.2、相关技术介绍 1.3、TCP 协议1.4、TCP 传输控制协议 1.5、套接字2、系统框架 3、系统设计流程图 4、系统的实现 4.1、服务器端程序 4.2、客户端程序 结论参考文献1、引言1.1、课题背景TCP/IP 起源于美国国防部高级研究规划部署( DARPA )的一项研究计划实现若干台 主机的相互通信。现在, TCP/IP 已成为 Internet 上通信的工业标准。因为 OSI 模型的七层参考模型比较复杂,并且在实际运用中难以实现,所以目前应用比 较多的是 TCP/IP 模型,该模型

3、包括 4 个层次:应用层运输层网络层网络接口层对于 TCP/IP 网络层次模式,核心协议是网络层的 IP 协议,和运输层的 TCP 协议,这也 是为何成为 TCP/IP 协议的缘由。1.2、相关技术介绍NET 开发平台及 C .NET 开发语言NET 框架是 Microsoft 公司推出的一种全新的开发平台 ,提供了统一的、面向对象并且可以扩 展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。微软为了推行.NET战略,特别为.NET平台设计了一种语言一一 C#。C#是由C和C+派生而 来的一种“简单、流行、面向对象、类型安全”的程序设计语言,其综合了

4、Visual basic 的高效率和C+的强大功能,然而更多的人感觉 C#更类似JAVA。事实上C#融合了大量的JAVA 思想,C#是.NET的关键性语言,它是整个.NET平台的基础。与 C#相比,.NET所支持的其 它语言显然是配角,包括 VC+.NET 在内。但是微软并没有打算放弃 VC+.NET ,相反,微 软对 VC+.NET 有着另一番独特的打算, VC+.NET 的定位与 C#不完全重合,VC+.NET 应用范围仍强于C#,这一点无论对微软公司还是软件业应用现状都非常重要。可见VC+.NET在NET框架中已经退化成了底层的语言了,就像C+之前的标准C语言一样,以后将只有开发底层或桌

5、面程序的程序员使用它。 它虽然仍旧强大, 但是已经不是主流, 而主流就是C#语言。1.3、TCP 协议TCP/IP 网络协议 协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种 “语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。 相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种 形式:面向连接的服务和无连接的服务。计算机网络中已经形成的网络体系结构主要有两个:OSI 参考模型和 TCP/IP 参考模型。TCP/IP参考模型是因特网(In ternet)的基础。和 OSI的7层协议相比,TCP/IP协议只

6、有4 个层次。通常说的 TCP/IP 是一组协议的总称, TCP/IP 实际上是一个协议族,包括 100 多个 相 互 关联的 协议 , 其 中 IP(Internet Protocol, 网 际协议)是网 络层 最主 要 的协议 ; TCP(Transmission Control Protocol, 传输控制协议 )和 UDP(User Datagram Protocol, 用户数据报 协议是传输层中最主要的协议 ),一般认为 IP、TCP、UDP 是最根本的三种协议,是其他协议的基础。1.4、TCP 传输控制协议 面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,

7、如果未 收到数据或者数据被损坏,则请求重新传输。 TCP 协议就使用这种可靠通信。使用 TCP 协议的应用层协议包括 HTTP、 FTP、 SMTP 和 Telnet 等。TCP 要求在发送数据之前必须打开连接。 服务器应用程序必须执行一个称作被动打开 ( passive open)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼 叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号( SYN )以标识连接。客户应用程序可以将动态端 口号作为本地端口使用。 服务器必须向客户发送一个确认 (

8、 ACK )以及服务器的序列号 (SYN)。 随后,客户回复一个 ACK ,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回 ACK 消息。如果在收到 ACK 之前发送 方已经超时,则消息将被放到重发队列中以再次发送。由于它的握手机制, 所以 TCP 协议比较复杂并且费时, 但此协议在处理数据时对数据包的传 送有保障,从而使得在应用程序协议中不需要再包括该功能。1.5、套接字 套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程 API,它最初由伯克利大学为 BSD UNIX而创建。BSD套接字在经过修改 后被用作 Windows 环

9、境的编程接口(并且被命名为 WinSock)。 WinSock API 被包装在命名空间的.NET类中。Windows Sockets是一个独立于协议的编程接口, 用于编写网络应用程序。套接字的第二层含义表示一个用于在进程间进行通信的终端。在TCP/IP 中,每个终端都与一个IP地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区分。 流失套接字用 TCP/IP 协议来使用面向连接的通信;另一方面,数据报套接字用 UDP/IP 来使 用无连接通信。2、系统框架3、系统设计4、系统的实现4.1、服务器端程序#i nclude #i nclude Void mai n()/加载

10、套接字库WORDwVersio nRequested;WSADATA wsaDdata;Int error;wVersio nRequested=MAKEWORD(1,1);err=WSAStarup(wVersio nRequested,&wsaDATA);if(err!=O) return;lf(LOBYTE(wsadata.wVersio n)!=1|HIBYTE(wsadata.wVersio n)!=1)WSAClea nu p();Return;/创建用于监听的套接字SOCKET sockSrv=socket (AF-INET,SOCK-STREAM,0);SOCKADDR-IN

11、addrSrv;addrSrv.s in-addr.S-u n.S-addr=hoto nl (INADDR-ANY);addrSrv.si n-family=AF-INET;addrSrv.s in-port=hto ns(6000)/绑定套接字Bin d(sockSrv ,(SOCKADDR*)&addrSrv ,sizeof(SOCKADDR);将套接字设为监听模式,准备接收客户请求Liste n( sockSrv,s);SOCKADDR-IN addrClie nt;Int len=sizeof( SOCKADDR );While(1)/等待客户请求到来SOCKET sockCo nn

12、=accept(sockSrv ,( SOCKADDR*)&addrClie nt ,&len);Char sen dBuf(100);Sprintf(sendBuf ,) Welcom %s to ,ine-ntoa(addrClient.sin-addr);/发送数据Sen d(sockCo nn ,se ndbuf ,strle n(sen dBuf)+1,0);Char recvBuf(100);/接受数据Recv(sockCo nn, recvBuf ,100 ,0);/打印接受的数据Printf( %sn,recvBuf);/关闭套接字Closesocket(sockC onn);

13、4.2、客户端程序#i nclude #i nclude Void mai n()/加载套接字库WORD wVersio nRequested;WSADATA wsaDdata;Int error;wVersio nRequested=MAKEWORD(1,1); err=WSAStarup(wVersionRequested,&wsaDA TA);if(err!=0) return;lf(LOBYTE(wsadata.wVersio n)!=1|HIBYTE(wsadata.wVersio n)!=1)WSAClea nu p();Return;/创建套接字SOCKET sockSrv=so

14、cket (AF-INET,SOCK-STREAM,0);SOCKADDR-IN addrSrv;addrSrv.s in-addr.S-u n.S-addr=hoto nl (INADDR-ANY);addrSrv.si n-family=AF-INET;addrSrv.s in-port=hto ns(6000)/向服务器发出连接请求Conn ect (sockClie nt ,(SOCKADDR* )&addrSrv ,sizeof(SOCKADDR);/接受数据Char recvBuf100;Recv(sockClient , recvBuf ,100 ,0);Printf( %sn,

15、recvBuf);/发送数据Send(sockClient , ” This is lisi ”,strlen( This in lisi )+1 ,0);/关闭套接字Closesocket(sockC onn);WSACLea nup();结论在此设计中仅仅适合于数量少的计算机间的通信,其中一个缺陷是,当多台计算机同时进行通信时,会照成网络拥塞,可能导致消息传输中丢失,此设计没有做出解决的方案,但有这样的方案猜想,为了解决拥塞问题,可以使用慢开始、拥塞避免、快从传和快恢复算法, 进而改进此设计,但是这会涉及大量的数学运算。此设计还存另一个缺陷,没有实现可靠传输,TCP协议的可靠传输机制是用字

16、节的序号进行传输控制,而这里仅是监听端口是否有 数据发送,如果有,就接收,没有就继续监听。参考文献1孙鑫,VC+深入详解M北京:电子工业出版社,2012.7: 528-5462谢希仁,计算机网络M北京:电子工业出版社,2008.1: 180-210版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。版权为潘宏亮个人所有This article in eludes someparts, in cludi ng text, pictures, and desig n. Copyright is Pan Hon glia ngs pers onal own ership.用户可将本文的内

17、容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律 的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本 文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面 许可,并支付报酬。Users may use the contents or services of this articlefor pers onal study, research or appreciati on, and other non-commercial or non-profit purposes, but at the same time, they

18、shall abide by the provisi ons of copyright law and other releva nt laws, and shall n ot infringe upon the legitimate rights of this website and its releva nt obligees. In additi on, when any content or service of this article is used for other purposes, writte n permissi on and remun erati on shall be obta ined from the pers on concerned and the releva nt obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为 使用目的的合理、善意引用,不得对本文内容原意进行曲解、修改, 并自负版权等法律责任。Reproducti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论