1 / 30
文档名称:

华南农业大学计算机网络课程设计报告.pdf

格式:pdf   大小:4,280KB   页数:30页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

华南农业大学计算机网络课程设计报告.pdf

上传人:青山代下 2024/5/21 文件大小:4.18 MB

下载得到文件列表

华南农业大学计算机网络课程设计报告.pdf

相关文档

文档介绍

文档介绍:该【华南农业大学计算机网络课程设计报告 】是由【青山代下】上传分享,文档一共【30】页,该文档可以免费在线阅读,需要了解更多关于【华南农业大学计算机网络课程设计报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..华南农业大学理学院课程实验〔设计〕报告专业级:信息与计算科学学生学号:30760学生学号:30760学生姓名:学生姓名:实验题目:Socket应用程序设计指导老师:实验时间:月日月29日可修改欢送精品Word:..可修改欢送精品Word:..目录实验内容和要求.............................................................................错误!未定义书签。.实验内容................................................................................错误!未定义书签。.2实验要求.............................................................................................................................................................................错误!未定义书签。2实验过程......................................................................................错误!未定义书签。.................................................................................................错误!未定义书签。2..客户端........................................................................错误!未定义书签。2..2效劳器.....................................................................................................2.................................................................................................错误!未定义书签。................................................................................................................................4.........................................................................................错误!未定义书签。..登陆功能..................................................................错误!未定义书签。..2聊天功能................................................................................................3离线聊天功能.......................................................错误!未定义书签。..4接受离线信息功能................................................................................5聊天记录功能......................................................................................6显示用户状态功能..............................................................................7文件传输功能.......................................................错误!未定义书签。.........................................................................................错误!未定义书签。、注册验证功能.........................................................................19......................................................................................................................21......................................................................................................................223实验结果...................................................................................................................234讨论与总结...............................................................................................................245参考文献......................................................................................错误!未定义书签。6小组分工......................................................................................错误!未定义书签。可修改欢送精品Word:..可修改欢送精品Word:..,要求掌握基于此协议实现网络通信,理解TCP与UDP的不同特征以及实现方式。基于Windows平台建立一个基于TCP/IP协议的网络通讯小应用,实验可采用UDP或TCP实现。.2实验要求〔〕能够进行用户管理,所有用户必须登录到效劳器,有效劳器维护在线信息;〔2〕IM功能:用户登录后能够进行实时多方点到点短信息通信,如聊天;〔3〕能够选择要求效劳器进行转发效劳;〔4〕能够保存通信记录到数据库〔SQLServer或者其他桌面型数据库或数据文件〕;〔5〕能进行双方文件传输,能够显示进度;*〔6〕支持断点重传,检查时需有功能随时中断传送,并在下次启动时能显示重传状态;*〔7〕数据包加密;*〔8〕实时语音双向传送功能;*〔9〕多方通话功能;〔0〕界面设计要求布局合理,信息清晰。〔〕自加功能。〔*为选做内容〕.3实验实现的功能〔〕效劳器能够进行用户管理,所有用户必须登录到效劳器,有效劳器维护在线信息;〔2〕IM功能:用户登录后能够进行实时多方点到点短信息通信,如聊天;〔3〕效劳器离线转发功能;〔4〕客户端保存群聊天记录;〔5〕能进行双方文件传输,能够显示进度;〔0〕界面设计要求布局合理,信息清晰。可修改欢送精品Word:..2实验过程2..客户端〔〕登陆功能:在用户填写相关的账户和密码时,客户端能够发送连接客户端要求,当,连上客户端的时候,客户端能够将账号和密码信息发送到效劳器进行核对,并返回信心〔2〕聊天功能:在客户端中,用户有权选择群聊还是与某在线用户私聊〔3〕离线聊天功能:在线的用户可能通过效劳器将信息发给离线的用户〔4〕接受离线信息共能:当用户上线时,接收其他用户的离线信息〔5〕聊天记录功能:客户端能自动将群聊的信息保存在相应的数据库当中〔6〕显示用户状态功能:对于在线的用户和离线的用户能够及时显示在表格当中2..2效劳器〔〕维护用户功能:添加新用户,修改用户密码,删除用户〔2〕更新用户状态功能:通知客户端更新成员状态和相应的列表〔3〕离线功能:为离线用户保存离线信息,并且在用户上线的时发送相应的离线信息〔4〕检验用户信息功能:验证用户的账号和密码的正确性,并禁止用户异地同时登陆〔5〕显示群聊记录:在效劳器中几时显示群聊的信息可修改欢送精品Word:..可修改欢送精品Word:....登陆功能〔〕在按下登陆按钮的时候,程序获取界面中的效劳器中IP地址和端口号,同可修改欢送精品Word:..时检验账号和密码是否有误。假设账号和密码填写上没有错误,进行连接效劳器。代码如下:mand_Click()'=False'设置能否登陆标志为“不能〞'检查账号和密码填写是否有空请输入账号和密码ElseCalltcpClient_Connect'=7Then'&&&'***账号***###密码###=TrueEndIfEndSubPublicSubtcpClient_Connect()<>7ThenDoEventsEndIfEndSub〔2〕当连接成功后,发送账号和密码,用相关的已经定义好协议进行封装发送给效劳器。协议是***账号***###密码###代码如下:=7Then'&&&'***账号***###密码###〔3〕当客户端收到的效劳器的协议信息是密码和账号是正确的时候才能进行真正的登录。协议是:当收到*#时,代表登录成功。当收到*ERROR时,代表没有这账号。当收到#ERROR时,代表密码错误。当收到*ONLINE时,代表账号已经登录。可修改欢送精品Word:..代码如下:login=..2〔〕群聊天。,便可以发送信息。发送的协议:$$$群聊天信息$$$,通过进行过协议封装的聊天信息,能够让效劳器进行识别,别且转发给在线用户。欢送精品Word:..PrivateSubcmdSend_Click()发送内容不能为空ExitSubEndIf:'============================================插入聊天记录:Chr(0)'tcp_data是表的列名'=============================================&Chr(0)+CStr(Now())+Chr(0)+:=Len()EndSub〔2〕发送私聊信息。在listviews中点击相应的用户名字就可以进行私聊,在登陆的时候已经设置好TCP控件的端口号。代码如下:PublicSubset_privatechat()Fori=Private_Chat(i).=8080+iNextEndSub〔3〕接收在线私聊信息。PrivateSubClientCli_DataArrival(ByValbytesTotalAsLong),=&=Len()'=Then'=True'EndIfEndSubPrivateSubClientSer_DataArrival(ByValbytesTotalAsLong),=&str欢送精品Word:..=Len()'=Then'=True'..3在输入框中输入私聊信息时,先判断是否在线,假设是在线的话直接利用已经和对方连接的TCP控件进行发送信息。假设是离线用户的话,利用协议将封装好的离线信息发送给效劳器,在通过效劳器发送给离线的用户。离线信息协议:%**发送者账号****2接收者账号**2**$$离线的信息**$$%代码如下:mand_Click()DimstrAsStringIfLen()=0Then发送内容不能为空!ExitSubEndIfstr=str&Chr(3)&Chr(0)&Chr(3)&Chr(0)==<><>7Then'=&=Len()EndSub欢送精品Word:....4接收离线私聊信息。当收到效劳器的离线信息时,对发送过来的字符串进行信息提取,提取出发送者、接收者和信息。Functioncheck_outlinemessage(messageAsString)sender_where=0reciever_where=0outmessage_where=0sender_where2=0reciever_where2=0outmessage_where2=0Dosender=Mid(message,sender_where+3,sender_where2sender_where3)outmessage=Mid(message,outmessage_where+4,outmessage_where2欢送精品Word:..outmessage_where4)(n).Text=senderThenPrivate_Chat(n).=Private_Chat(n).&outmessagePrivate_Chat(n).=Len(Private_Chat(n).)(n).ForeColor=(n).().ForeColor=(n).(2).ForeColor=..5〔〕读取数据库中的聊天信息。添加VB的控件ADO,ADO控件建立起读取聊ess,读取数据库中信息,。代码如下:Subadddata()=&EndSub欢送精品Word:..当按下群聊天记录的时候弹出对应的RichTextBox控件如以以以下列图〔2〕将群聊天信息参加到数据库。提取$$$与$$$之间的群聊天信息ssData=Mid(sData,group_chat+3,group_chat2group_chat3)'============================================插入聊天记录a=CStr(Now())+Chr(0)+ssData+Chr(0)欢送精品Word:..'tcp_data是表的列名'=============================================+Chr(0)+CStr(Now())+Chr(0)+ssData+Chr(0)=Len()EndIfCallcheck_useronline(sData)..6显示用户状态功能〔〕当用户登录的时候,效劳器会发送当前用户列表的信息给客户端,协议为***用户名***@@***@IP地址@@@,当IP地址为NULL时,客户端识别为没有上线,只有不是NULL的时候才是真正有上线,对于上线的用户,在listview中的状态会由0变为,表示已经上线。同时会清空listview,将所以的用户进行重新的加载。:PublicSubcheck_useronline(gDataAsString)account_where=0IP_where=0account_where2=0IP_where2='清空列表DoUsername=Mid(gData,account_where+3,ount_where3)UserIP=Mid(gData,IP_where+3,IP_where2IP_where3)Setitmx=(,,Username)(2)=()=可修改欢送精品Word:..()=0EndIfEndIfEndSub〔2〕当用户退出的时候,会发送Q的字符串给效劳器,告诉效劳器退出,并且让效劳器发送用户状态信息给各个在线用户,再次刷新用户。代码如下:PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)..7文件传输功能基于TCP/IP协议的通信,需要分别建立客户端应用程序和效劳器段应用程序,大致流程如图4可修改欢送精品Word:..实现原理:发送方先获取待传输文件的根本信息,主要是文件名及文件长度〔用于创立数据缓冲区〕;然后,将其发送给接收方;接着,建立和文件一样大小的数据缓冲区,并将文件读入;最后,将数据缓冲区中的数据发送给接收方。与此同时,当接收方接收到文件名和文件长度之后,就为其创立新的文件和数据缓冲区;然后,接收传输的文件数据,并将其放在数据缓冲区中;最后,依次将数据缓冲区的数据写入新创立的文件中。这样便完成了不同计算机之间的文件传输。在本次实验中,于私人聊天模式里,当勾上“翻开文件传输通道后〞,右边button将变为可用,如以以以下列图:,此时点击“发送文件〞按钮,便会弹出窗体这时窗体里的winsock控件〔数组〕将处于监听状态,执行代码如下可修改欢送精品Word:..Forj=(j).=8000+jNextj并且假设此时点击“浏览〞时,dlg〞,执行下段代码mand_Click()==“翻开一个测试文件…〞.Filter=“所有文件(*.*)|*.*〞.Flags=&=.FileNameEndWithOpenErr:EndSub假设此时选择的文件正确〔路径,文件存在〕,将可以点击“发送按钮〞,已连接的对方的winsock将会发生〞请求〞事件,接受“请求〞的话,将发生“数据到达〞,相关代码如下所示:PrivateSubwskServer_ConnectionRequest(ByValequestedAsLong)Private_send(SelectNo).“已连接…〞=TrueEndSubPrivateSubwskServer_DataArrival(ByValbytesTotalAsLong)DimWskChatAsStringPrivate_send(SelectNo).=“NoThanks〞ThenMsgBox“对方拒收你发送的文件.〞,vbExclamation,“Server〞ElseIfWskChat=“OkSend〞ThenMsgBox“对方接受了你的文件.〞&vbCrLf&vbCrLf&“单击“确定〞可修改欢送精品Word:..开始传送…〞,vbInformation,“Server〞GetFileNum=FreeFileLenFile=FileLen()‘ProBarLen=LenFileVarPlus=0‘#GetFileNumOnSend==FalseCallTCPSendFile(Private_send(SelectNo).wskServer,GetFileNum,SplitFile)EndIfEndSub假设没有连接上,我们添加了Timer控件,来监控状态,假设处于“连接关闭〞状态,将重置winsock,并显示相应信息给用户〔例如“传送〞按钮不可用等〕,如以以以下列图:相关代码如下:PrivateSubTimer_Timer()IfPrivate_send(SelectNo).=sckClosingThen对方的连接已关闭Private_send(SelectNo).=8000+=FalseEndIfEndSub根据上面所述的原理,是使用内存来存储数据,然而,当需要传送的数据比拟大时,就不能像以上介绍的那样,直接将整个文件放入数据缓冲区中了,我们可修改欢送精品Word:..的内存是无法忍受用一个几百MB甚至上GB的空间去存储那些临时数据的。显然,这种做法已远不能满足我们的需求,这时可以将文件按照一定的大小,分成假设干个数据包〔远小于内存的容量〕。首先,设置数据包的大小〔如64K〕,根据文件的根本信息〔主要文件的长度〕,计算出总共需要的数据包数;然后,依次读取同数据包一样大小的数据到数据缓冲区中;接着,将数据缓冲区中的数据,发送到指定的计算机上;同时在另一端,建立一个数据缓冲区,缓冲区的大小要根据接收到的数据来确定,依次接收客户端传输过来的数据包,并将数据缓冲区的数据写入相应的文件中,这样就很容易实现大文件的传输了,这是一种较为常用的方法〔较为容易实现断点续传〕,不过本次采用的是一种“迭代递归〞的思想,使用自己编写的函数SplitFile()来稍微简单实现传输大文件,但断点重传功能将受到限制,相关代码如下:PrivateFunctionSplitFile()AsLongDimGetCountAsLongIfLenFile>=892ThenGetCount=892LenFile=LenFileGetCountElseGetCount=LenFileLenFile=LenFileGetCountEndIfVarPlus=VarPlus+=(VarPlus/ProBarLen)*00SplitFile=GetCountEndFunctionPrivateSubTCPSendFile(objWinSockAsWinsock,FileNumberAsInteger,SendLenAsLong)DimFileByte()AsByte,iAsLongReDimFileByte(SendLen)Get#FileNumber,,,在私聊和传送文件窗体里,我们添加了VB自带的控件progressbar,进度也根据以传送文件的大小和总大小作简单除法:=(VarPlus/ProBarLen)*00来显示,图示效果如下:可修改欢送精品Word:..可修改欢送精品Word:..、,进入初始界面,这里winsock将初始化,得到IP地址并且设置端口等,并对客户端管理界面进行初始化〔此时该界面不显示但却已执行相关操作,点击“客户端〞界面时显现〕:可修改欢送精品Word:..当有客户端请求连接效劳器时,同意的话,发生〞事件到达〞,效劳器采取机制:判断数据种类,并采取相关操作。代码如下:DimsDataAsStringDimsNameAsStringtcpServer(Index).=Len()'客户端向效劳器发送已经登录和退出信息'===========================================================sName=Left(sData,)DoEventsDoEventsCalldel_IP(tcpServer(Index).RemoteHostIP)'在客服端管理中删除已退出客户端的IP地址和上线记录tcpServer(Index).CloseNumOnline=NumOnlineEndIf可修改欢送精品Word:..'==========================================================='客户端向效劳器发送账号和密码,效劳器提取账号和密码'============================================