基于TCP协议的网络通信设计与实现_第1页
基于TCP协议的网络通信设计与实现_第2页
基于TCP协议的网络通信设计与实现_第3页
基于TCP协议的网络通信设计与实现_第4页
基于TCP协议的网络通信设计与实现_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

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

2、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模型,该模型包括4个层次:应用层运输层网络层网络接口层对于TCP/IP网络层次模式,核心协议是网络层的IP协议,和运

3、输层的TCP协议,这也是为何成为TCP/IP协议的缘由。1.2、相关技术介绍NET开发平台及C.NET开发语言NET框架是Microsoft公司推出的一种全新的开发平台,提供了统一的、面向对象并且可以扩展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。微软为了推行.NET战略,特别为.NET平台设计了一种语言C#。C#是由C和C+派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,其综合了Visual basic的高效率和C+的强大功能,然而更多的人感觉C#更类似JAVA。事实上C#融合了大量的JAVA思想,C#是.NET的关键性语言,它

4、是整个.NET平台的基础。与C#相比,.NET所支持的其它语言显然是配角,包括VC+.NET在内。但是微软并没有打算放弃VC+.NET,相反,微软对VC+.NET有着另一番独特的打算,VC+.NET的定位与C#不完全重合,VC+.NET应用范围仍强于C#,这一点无论对微软公司还是软件业应用现状都非常重要。可见VC+.NET在NET框架中已经退化成了底层的语言了,就像C+之前的标准C语言一样,以后将只有开发底层或桌面程序的程序员使用它。它虽然仍旧强大,但是已经不是主流,而主流就是C#语言。1.3、TCP协议TCP/IP网络协议协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此

5、交流的一种“语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:面向连接的服务和无连接的服务。计算机网络中已经形成的网络体系结构主要有两个:OSI参考模型和TCP/IP参考模型。TCP/IP参考模型是因特网(Internet)的基础。和OSI的7层协议相比,TCP/IP协议只有4个层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(Internet Protocol, 网际协议)是网络层最主要的协议;TCP(Transm

6、ission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。1.4、TCP传输控制协议面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。TCP协议就使用这种可靠通信。使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passive open)的操作,以利用一个已知

7、的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用

8、程序协议中不需要再包括该功能。1.5、套接字套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程API,它最初由伯克利大学为BSD UNIX而创建。BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。WinSock API被包装在System.Net.sockets命名空间的.NET类中。Windows Sockets 是一个独立于协议的编程接口,用于编写网络应用程序。套接字的第二层含义表示一个用于在进程间进行通信的终端。在TCP/IP中,每个终端都与一个IP地址和一个端口号绑定。我们必须对流式套接字和数据报套接

9、字这两种类型进行区分。流失套接字用TCP/IP协议来使用面向连接的通信;另一方面,数据报套接字用UDP/IP来使用无连接通信。2、系统框架3、系统设计4、系统的实现4.1、服务器端程序#include #include Void main() /加载套接字库 WORD wVersionRequested; WSADATA wsaDdata; Int error;wVersionRequested=MAKEWORD(1,1);err=WSAStarup(wVersionRequested,&wsaDATA);if(err!=0) return;If(LOBYTE(wsadata.wVersion

10、)!=1|HIBYTE(wsadata.wVersion)!=1) WSACleanup(); Return;/创建用于监听的套接字SOCKET sockSrv=socket (AF-INET,SOCK-STREAM,0);SOCKADDR-IN addrSrv;addrSrv.sin-addr.S-un.S-addr=hotonl(INADDR-ANY);addrSrv.sin-family=AF-INET;addrSrv.sin-port=htons(6000)/绑定套接字Bind(sockSrv ,(SOCKADDR*)&addrSrv ,sizeof(SOCKADDR);/将套接字设为

11、监听模式,准备接收客户请求Listen(sockSrv,s);SOCKADDR-IN addrClient;Int len=sizeof( SOCKADDR );While(1)/等待客户请求到来SOCKET sockConn=accept(sockSrv ,( SOCKADDR*)&addrClient ,&len);Char sendBuf(100);Sprintf(sendBuf ,)”Welcom %s to ” ,ine-ntoa(addrClient.sin-addr);/发送数据Send(sockConn ,sendbuf ,strlen(

12、sendBuf)+1,0);Char recvBuf(100);/接受数据Recv(sockConn,recvBuf ,100 ,0);/打印接受的数据Printf(“%sn”,recvBuf);/关闭套接字Closesocket(sockConn);4.2、客户端程序#include #include Void main() /加载套接字库 WORD wVersionRequested; WSADATA wsaDdata; Int error;wVersionRequested=MAKEWORD(1,1);err=WSAStarup(wVersionRequested,&wsaDATA);i

13、f(err!=0) return;If(LOBYTE(wsadata.wVersion)!=1|HIBYTE(wsadata.wVersion)!=1) WSACleanup(); Return;/创建套接字SOCKET sockSrv=socket (AF-INET,SOCK-STREAM,0);SOCKADDR-IN addrSrv;addrSrv.sin-addr.S-un.S-addr=hotonl(INADDR-ANY);addrSrv.sin-family=AF-INET;addrSrv.sin-port=htons(6000)/向服务器发出连接请求Connect (sockCli

14、ent ,(SOCKADDR*)&addrSrv ,sizeof(SOCKADDR);/接受数据Char recvBuf100;Recv(sockClient , recvBuf ,100 ,0);Printf(“%sn”,recvBuf);/发送数据Send(sockClient ,” This is lisi ”, strlen(“This in lisi”)+1 ,0);/关闭套接字Closesocket(sockConn);WSACLeanup() ;结论 在此设计中仅仅适合于数量少的计算机间的通信,其中一个缺陷是,当多台计算机同时进行通信时,会照成网络拥塞,可能导致消息传输中丢失,此设计没有做出解决的方案,

温馨提示

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

最新文档

评论

0/150

提交评论