




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于基于 TCP 协议下的简单网络通信与实现协议下的简单网络通信与实现 摘要 本文设计并实现了在 Windows 下基于局域网内的 TCP 协议的简单即时通信系统,系 统采用 TCP/IP 模式,底层通信通过 SOCKET 套接字接口对端口进行监听,当有消息发送来 时,做出相应的处理,服务器负责客户端的登录验证。本文首先讨论了套接字创建、绑定、 将套接字设置为监听模式、接受信息和关闭套接字从而实现简单的网络通信,然后阐述了 如何使用 C+来模拟基于 TCP 协议下的客户服务方式的网络通信过程。由于在此设计中主 要是使用 C 程序的形式来模拟 TCP 协议的传输方式,从而实现面向对象的可靠传输,在这 种情况下无需对 IP 协议进行讨论。 关键字:套接字 TCP 协议 - 2 - 目录 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 模型,该模型包括 4 个层次: 应用层 运输层 网络层 网络接口层 对于 TCP/IP 网络层次模式,核心协议是网络层的 IP 协议,和运输层的 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 的关键性语言,它是整个.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 网络协议 协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一 种“语言” 。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。 相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两 种形式:面向连接的服务和无连接的服务。 计算机网络中已经形成的网络体系结构主要有两个:OSI 参考模型和 TCP/IP 参考模型。 TCP/IP 参考模型是因特网(Internet)的基础。和 OSI 的 7 层协议相比,TCP/IP 协议只有 4 个层次。通常说的 TCP/IP 是一组协议的总称,TCP/IP 实际上是一个协议族,包括 100 多个 - 2 - 相互关联的协议,其中 IP(Internet Protocol, 网际协议)是网络层最主要的协议; TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报 协议是传输层中最主要的协议),一般认为 IP、TCP、UDP 是最根本的三种协议,是其他协 议的基础。 1.4、TCP传输控制协议 面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果 未收到数据或者数据被损坏,则请求重新传输。TCP 协议就使用这种可靠通信。 使用 TCP 协议的应用层协议包括 HTTP、FTP、SMTP 和 Telnet 等。 TCP 要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开 (passive open)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对 网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open) ,为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程 序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服 务器的序列号(SYN) 。随后,客户回复一个 ACK,这样就建立了链接。 现在可以发送和接收消息了。接收消息后,总是返回 ACK 消息。如果在收到 ACK 之前发 送方已经超时,则消息将被放到重发队列中以再次发送。 由于它的握手机制,所以 TCP 协议比较复杂并且费时,但此协议在处理数据时对数据包的 传送有保障,从而使得在应用程序协议中不需要再包括该功能。 1.5、套接字 套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一 个含义是套接字编程 API,它最初由伯克利大学为 BSD UNIX 而创建。BSD 套接字在经过 修改后被用作 Windows 环境的编程接口(并且被命名为 WinSock) 。WinSock API 被包装在 System.Net.sockets 命名空间的.NET 类中。Windows Sockets 是一个独立于协议的编程接口, 用于编写网络应用程序。 套接字的第二层含义表示一个用于在进程间进行通信的终端。在 TCP/IP 中,每个终端都与 一个 IP 地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区 分。流失套接字用 TCP/IP 协议来使用面向连接的通信;另一方面,数据报套接字用 UDP/IP 来使用无连接通信。 2、系统框架 使用TCP连接 Internet 传输隧道 使用TCP连接 Internet 传输隧道 客户 客户 字节流 字节流 客户与客户传输流图构架 3、系统设计 - 2 - 利用socket函数创建套接字 将这个套接字绑定到本地 一个本地的某个地址和端口 这时需要调用bind函数 调用listen 函数 调用accept函数 等待并接受客 户连接请求 用send函数向 客户发送端数 据 调用 closesocket 关闭监听需要调用 WASCleanup 等待客户请求到来;当请求到来后, 接受连接请求 返回一个新的对应于 此连接的套接字(accept) 等待客户请求到来;当请求到来后, 接受连接请求 返回一个新的对应于 此连接的套接字(accept) 创建套接字 创建套接字 将套接字绑定到一个本地地址口上 将套接字绑定到一个本地地址口上 将套接字设置为监听模式 (listen) 准备接受客户请求 将套接字设置为监听模式 (listen) 准备接受客户请求 用放回套接字和用户进行通信 (send/recv) 用放回套接字和用户进行通信 (send/recv) 返回 等待另一客户请求 返回 等待另一客户请求 关闭套接字 关闭套接字 4、系统的实现 4.1、服务器端程序 #include #include Void main() /加载套接字库 WORD wVersionRequested; WSADATA wsaDdata; Int error; wVersionRequested=MAKEWORD(1,1); err=WSAStarup(wVersionRequested, if(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) /绑定套接字 Bind(sockSrv ,(SOCKADDR*) /将套接字设为监听模式,准备接收客户请求 Listen(sockSrv,s); SOCKADDR-IN addrClient; - 4 - Int len=sizeof( SOCKADDR ); While(1) /等待客户请求到来 SOCKET sockConn=accept(sockSrv ,( SOCKADDR*) Char sendBuf(100); Sprintf(sendBuf ,)”Welcom %s to ” ,ine-ntoa(addrClient.sin-addr); /发送数据 Send(sockConn ,sendbuf ,strlen(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, if(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 (sockClient ,(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() ; 结论 - 6 - 在此设计中仅仅适合于数量少的计算机间的通信,其中一个缺陷是,当多台计算机同时进 行通信时,会照成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025网络安全行业劳动合同模板
- 2025采购销售货物合同书
- 租赁园区大棚合同范本
- 2025携手共进合作开发土地合同模板
- 2025风电场EMC合同模板
- 民间抵押汽车合同范本
- 车辆采购合同范本
- 爷孙房屋购买合同范本
- 道闸租赁合同范本
- 定制车库维修合同范本
- 福建省福州市联盟校2023-2024学年高一下学期期末考试英语试题(解析版)
- 2025文化和旅游部直属事业单位招聘社会人员29人模拟试卷附答案详解
- 2024-2025学年重庆市万州区八年级(下)期末语文试卷
- 2025年乒乓球二级裁判考试题及答案
- 血标本采集考试试题附有答案
- 2025年公共安全生产试题及答案
- 员工工资及考勤管理制度
- 浙江省温州市龙湾区2024-2025学年七年级下学期学业水平期末检测数学试题
- 废料出售管理办法
- 企业干部退出管理办法
- 河南选调生管理暂行办法
评论
0/150
提交评论