基于tcp协议通信系统的设计与实现.docx
- 文档编号:25830216
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:13
- 大小:32.93KB
基于tcp协议通信系统的设计与实现.docx
《基于tcp协议通信系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于tcp协议通信系统的设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。
基于tcp协议通信系统的设计与实现
基于TCP协议通信系统的设计与实现
杨秀森
(贵州师范大学机电学院电气工程及其自动化学号:
************)
摘要:
通信协议(communicationsprotocol)是指双方实体完成通信或服务所必须遵循的规则和约定。
协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。
通信的底层通信是通过SOCKET套接字接口实现的。
当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。
使用这个统一的接口,可以编写一个可移植的TCP通信程序。
本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负责客户端的登录验证,好友信息的保存和心跳报文的发送。
客户端采用P2P方式实现消息传递,并能实现文件的传输。
本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。
关键词:
TCP协议;通信协议系统;套接字;文件传输;C/S模式;
TheSystemDesignandImplementationof
BasedonTCPProtocolCommunication
YangXiuSen
(GuizhouNormalUniversityInstituteofmechanicalandelectricalengineeringanditsautomationnumber:
091401010067)
Abstract:
Communicationprotocol(communicationsprotocol)referstobothentitiestocompletecommunicationorservicemustfollowtherulesandconventions.Theprotocoldefinesadataunitformat,informationunitshouldcontaininformationandmeaning,connectionmode,informationtransmissionandreceptiontiming,therebyensuringthatthenetworkdatasmoothlytransmittedtodetermineplaces.CommunicationcommunicationisthroughtheSOCKETsocketinterfaceimplementation.ThecurrentmainstreamUNIXsystemandMicrosoftWINDOWSsysteminthekernelprovidestoSOCKETinterfacesupport.Usingtheunifiedinterface,canbepreparedinatransplantableTCPcommunicationprogram.
ThispaperdesignedandimplementedbasedonasimpleLANinstantcommunicationsystem,thesystemadoptsC/Smodel,theunderlyingcommunicationthroughtheSOCKETsocketinterfaceimplementation,serverfortheclienttologinauthentication,friendsofinformationpreservationandheartbeatmessagesending.ClientusingP2Pmodetorealizetheinformationtransmission,andcanrealizethefiletransfer.Thispaperfirstdiscussesthesynchronizationsocket,asynchronoussocket,multithreadingconcurrentexecutionofthetask;andthendescribestheclient,theservercanusetheXMLserializationofnewscommunication.
Keywords:
TCPprotocol;communicationprotocolsystem;socket;filetransfer;C/Smodel;
1引言
1.1研究背景
在计算机通信中,通信协议用于实现计算机与网络连接之间的标准,网络如果没有统一的通信协议,电脑之间的信息传递就无法识别。
通信协议是指通信各方事前约定的通信规则,可以简单地理解为各计算机之间进行相互会话所使用的共同语言。
两台计算机在进行通信时,必须使用的通信协议。
TCP/IP(TransportControlProtocol/InternetProtocol,传输控制协议/Internet协议)的历史应当追溯到Internet的前身—ARPAnet时代。
为了实现不同网络之间的互连,美国国防部于1977年到1979年间制定了TCP/IP体系结构和协议。
TCP/IP是由一组具有专业用途的多个子协议组合而成的,这些子协议包括TCP、IP、UDP、ARP、ICMP等。
TCP/IP凭借其实现成本低、在多平台间通信安全可靠以及可路由性等优势迅速发展,并成为Internet中的标准协议。
目前,TCP/IP已经成为局域网中的首选协议,在最新的操作系统(如WindowsXP、WindowsServer2003等)中已经将TCP/IP作为其默认安装的通信协议。
1.2国内外研究现状
当今,国际上对网络通信系统研究的较好的公司有,思科,Sun,Ms等公司,思科主要研究的是底层的传输;MS,Sun公司研究的是应用层。
其中ms公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。
但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。
当然,ie,同样也不是很受人青睐,这让人想起了,当年的网景公司,网景只是生不逢时。
MS不择手段的想打跨网景,可见其对网络的重视。
如今,Sun公司在网络应用上捷足先登,凭借着Java,Sun在网络的应用上领先于MS。
微软,想用同样的办法搞跨对手,因此它拿出了Visualc#,来对抗Java。
这些都是在应用层面的开发工具。
应用层上的产品就更显种类繁多。
ICQ几乎是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。
msn,是MS的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。
至于ie,是在Visualc++下开发的产品,虽然有严重的安全隐患,不过,至少能在某种程度上代表当今国际研究的水平。
此外,国际上最近出先了新的浏览器Firefox,其性能据说是远高于ie,也许在网络的天下,Ms又有了更强劲的对手。
国内在应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏平台,还有其他的一些平台,这些平台基本上都是基于VC++的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。
所以效率上不错。
此外,tencent的即时通信,也是做的很好的,从某中程度上来说,代表了国内最高的水平。
1.3研究方法
本系统采用C/S(Client/Server)结构进行设计,使用SQLServer2000构建数据库,并在.NET环境下使用VisualC#.net语言和SOCKET套接字开发一个基于TCP协议通信系统软件,实现简单的即时聊天,文件传输等功能。
2关键技术介绍
2.1TCP协议
2.1.1TCP/IP网络协议
协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。
网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。
相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:
面向连接的服务和无连接的服务。
计算机网络中已经形成的网络体系结构主要有两个:
OSI参考模型和TCP/IP参考模型。
TCP/IP参考模型是因特网(Internet)的基础。
和OSI的7层协议相比,TCP/IP协议只有4个层次。
通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(InternetProtocol,网际协议)是网络层最主要的协议;TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。
2.1.2TCP——传输控制协议
面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。
TCP协议就使用这种可靠通信。
使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。
TCP要求在发送数据之前必须打开连接。
服务器应用程序必须执行一个称作被动打开(passiveopen)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。
客户应用程序必须执行一个主动打开(activeopen),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。
客户应用程序可以将动态端口号作为本地端口使用。
服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。
随后,客户回复一个ACK,这样就建立了链接。
现在可以发送和接收消息了。
接收消息后,总是返回ACK消息。
如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。
由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。
2.2C/S模型
客户机/服务器模型,又称为Client/Server模型,简称C/S架构。
C/S计算技术在信息产业当中占有重要的地位。
这种客户机/服务器模型是一种非对称式编程模式。
该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。
对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。
在此“服务器”是指能在网络上提供服务的任何程序。
服务器接受网络上的请求,完成服务后将结果返回给申请者。
对于简单的服务,把每个请求用一个IP数据报发给服务器,服务器用另一个数据报返回响应。
客户机和服务器都是独立的计算机。
当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。
而那些用于访问服务器资料的计算机则被叫做客户机。
严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。
采用这种结构的系统目前应用非常广泛。
如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。
各种网络服务器基本都遵循同样的算法:
创建一个端口(Port),接受从网络上来的客户服务请求,完成计算后把结果返回给客户,如此反复。
2.3linux编程
1991年,芬兰赫而辛基的学生LinusTorvalds为了自己使用与学习的需要,他开发了类似Unix且运行在80386平台上运行的操作系统,命名为Linux。
为了使每个需要它的人都能够容易的得到它,LinusTorvalds把它变成了"自由"软件。
Linux内核编程就是开发Linux驱动程序,学会内核编程后,将会对操作系统的内部机制和工作原理有充分了解,可以从事硬件驱动开发、嵌入式系统开发等。
内核编程的语言仍是传统的C语言,但其编写方法和调用接口与传统应用程序的差别较大,了解如何处理中断、如何在内核态和用户态之间转换、PCI、DMA、内核地址映射、内核I/O等。
Linux具有以下主要特性:
(1)开放性开放性是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。
凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。
(2)多用户多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:
文件、设备)有特定的权限,互不影响。
Linux和Unix都具有多用户的特性。
(3)可靠的系统安全Linux采取了许多安全技术措施,包括对读、写进行权限控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。
(4)多任务多任务是现代计算机的最主要的一个特点。
它是指计算机同时执行多个程序,而且各个程序的运行互相独立。
Linux系统调度每一个进程,平等地访问微处理器。
由于CPU的处理速度非常快,其结果是,启动的应用程序看起来好像在并行运行。
事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的。
(5)良好的用户界面Linux向用户提供了两种界面:
用户界面和系统调用。
Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,又可存在文件上脱机使用。
shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。
可编程Shell是指将多条命令组合在一起,形成一个Shell程序,这个程序可以单独运行,也可以与其他程序同时运行。
系统调用给用户提供编程时使用的界面。
用户可以在编程时直接使用系统提供的系统调用命令。
系统通过这个界面为用户程序提供低级、高效率的服务。
Linux还为用户提供了图形用户界面。
它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。
2.4MFC
微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种应用程序框架,随微软VisualC++开发工具发布。
目前最新版本为10.0(截止2011年3月),并且发布了中文版。
该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject直接或间接派生,只有少部分类例外。
MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。
MFC提供了MFCAppWizard自动生成框架。
Windows应用程序中,MFC的主包含文件为"Afxwin.h"。
此外MFC的部分类为MFC/ATL通用,可以在Win32应用程序中单独包含并使用这些类。
由于它的易用性,初学者常误认为VC++开发必须使用MFC,这种想法是错误的。
作为ApplicationFramework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32程序设计。
3设计方案
3.1需求分析
软件针对局域网内部用户,实现用户间的通信。
需要分别实现服务器端和客户端的软件设计。
服务器端负责监听用户连接请求,负责连接数据库存储用户信息,负责发送给用户好友信息,负责发送心跳报文检查用户在线状态并即时让用户更新好友在新信息。
客户端发起主动连接,向服务器请求登录或者注册。
客户端可以修改昵称,可以加已知用户为好友(类似于MSN的好友添加功能)。
客户端之间可以发起P2P模式的聊天,可以传送文件。
3.2系统基本架构
基于C/S架构的TCP协议通信软件便于对用户信息进行统一管理和保存,面向特定的用户,对信息的安全控制能力很强。
为了减轻服务器负担,客户端之间的信息传递是采用P2P模式的,服务器只负责用户的注册,登录和用户在线状态的检验。
基本结构如图:
3.3功能模块设计
CLIENT:
1.注册:
(1)可以完成客户端注册,客户端可以通过填写信息进行注册,信息被发送到服务器端。
2.登录:
(1)客户可以输入账号和密码进行登录,客户端会发送登录信息等待服务器响应,登录成功后会发出登录成功信息并刷新好友列表。
3.修改:
(1)密码修改:
应该有密码修改功能
(2)信息修改:
可以更改一些注册信息
4.通信:
(1)即时聊天模块:
客户端与客户端之间建立线程进行即时聊天,也包含有简单的对称加解密算法功能。
(2)好友列表:
可以对好友列表进行添加删除等动作
5.文件传输:
(1)文件传输:
文件传输功能
SERVER:
1.注册回应:
对客户端传送的注册信息进行判断。
(1)HASH加密:
对用户的账号和密码信息进行HASH加密
(2)重复用户检查:
将加密后信息与已存在账号进行比较,检查是否账号已存在,如果存在就返回错误信息
(3)注册成功:
将可成功注册的用户账号和密码写入数据库内,并向客户端返回成功信息
2.修改回应:
(1)对密码和信息修改请求进行判断,执行和返回修改成功信息
3.登录回应:
(1)对登录的账号和密码进行加密检查后发回正确或错误情况,并记录上线信息
(2)好友列表发送:
给成功登录的账号发送好友列表及好友上线信息
(3)上线信息发送:
给成功登录的账号的好友发送在线信息(包括IP,端口等等信息)
4.在线情况:
(1)对登录,在线,离线的用户情况进行统计,记录和通知
(2)心跳测试:
每隔一段时间发送报文测试用户是否因意外原因离线
(3)情况记录:
将用户登录时间,IP,下线时间等信息记录入数据库
4.系统实现
4.1使用XML定义的即时通信协议
4.1.1信息结构MESSAGE.CS&UMESSAGE.CS
这两个C#类定义了包括服务器信息,状态信息,注册信息,登录信息,聊天信息或者请求文件传输信息的函数,服务器和客户端通过将它们实例化和序列化再转换成流在网络上进行传输。
UMESSAGE.CS主要代码如下:
[Serializable]
publicclassUMessage
{
publicUMessage(){}
privatestring_nickname;
privatestring_password;
privatestring_accounts;
privatestring_email;
privateint_info;//表示注册或者登录信息,客户端信息0为注册,1为登录;服务器返回信息0为用户已存在,1为注册成功,2为服务器未知错误,3为CLIENT在线检查,10为登录失败,11为登录成功
privateFriend[]_friend;
privateint_fn;
privatestring_fg;
publicstringNickname
{
get{return_nickname;}
set{_nickname=value;}
}
publicstringPassword
{
get{return_password;}
set{_password=value;}
}
publicstringAccounts
{
get{return_accounts;}
set{_accounts=value;}
}
publicstringEmail
{
get{return_email;}
set{_email=value;}
}
publicintInfo
{
get{return_info;}
set{_info=value;}
}
publicFriend[]Fri
{
get{return_friend;}
set{_friend=value;}
}
publicintFn
{
get{return_fn;}
set{_fn=value;}
}
publicstringFg
{
get{return_fg;}
set{_fg=value;}
}
}
由于MESSAGE.CS与UMESSAGE.CS类似,在此不再详述。
服务器和客户端都可以通过相同的代码对UMESSAGE赋值,再通过XmlSerializer方法进行将UMESSAGE序列化为XML文档,最后将XML文档转化为网络流进行传输。
代码如下:
#region将登录信息转为UMessage
privatevoidTraslator()
{
_message.Accounts=this.TextBox1.Text;
_message.Nickname="";
_message.Password=this.TextBox2.Text;
_message.Email="";
_message.Info=1;
_message.Fri=null;
}
#endregion
4.1.2数据结构FriendStruct
服务器如果保存和传递用户的好友信息是难点之一。
数据库的设计和信息的传递辨别都是比较难实现的。
在数据库方面,每个用户拥有各自的好友分组信息(UserFav),分组中间使用“,”分隔,在TCP_FriendInfo表中则分别保存了用户ID和好友ID,使用一个INT字段保存分组信息。
数据库以用户ID为标准对好友ID和分组信息进行内连接查询,就可以得到基本的好友信息了。
4.2数据库连接类
实现一个快捷简单的数据库连接的相关代码是非常有必要的。
实现的途径也多种多样,鉴于安全性和复杂性的需求不同,实现方法有简有繁。
本设计使用了一个简单的类(UserData.CS)实现了简单快捷的数据库连接和读取。
5结论
TCP协议通信是是网络发展的必然趋势,它的技术仍然在不断的改进和蓬勃发展中。
本次设计虽然实现了简单的通信功能,但是从很多方面来说都是不完善的:
实现了字符聊天却没有实现多媒体通信;实现了同步套接字聊天和异步套接字传送文件却没有实现更科学的异步套接字聊天和同步套接字传送文件。
在本次设计中,我深刻体会到Linux编程的基础性,多样化。
由于与网络紧密联系,Linux编程的也可能出现各种未知的问题,需要我们更深入地了解网络协议和架构,才可能做出通用性高,稳定性高的TCP协议通信程序。
6参考文献
[1]方睿,吴四九,刁仁宏.网络数据库原理及应用[M].四川:
四川大学出版社,2005。
[2]李文志,申剑,卢方国,柳正青,王宏,陈建伟.在.NET
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 tcp 协议 通信 系统 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)