华南农业大学计算机网络课程设计报告_第1页
华南农业大学计算机网络课程设计报告_第2页
华南农业大学计算机网络课程设计报告_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、华南农业大学理学院课程实验(设计)报告专业年级:11信息与计算科学学生学号:201130760学生学号:201130760学生姓名:学生姓名:实验题目:Socket应用程序设计指导老师:实验时间:2013年11月1日-2013年11月29日2 / 29目录1 实验内容和要求 1.1.1实验内容 1.1.2实验要求 1.1.3 实验实现的功能 1.2 实验过程 2.2.1 系统需求分析 2.2.1.1 客户端 2.服务器 2.2.2 系统的概要设计 3.2.3具体实现 4.客户端 4.登陆功能 4.聊天功能 6.2.3.1.3 离线聊天功能 7.2.3.1.4 接受离线信息功能 8.2.3.1.

2、5 聊天记录功能 9.显示用户状态功能 11文件传输功能 1.2服务器 1.82.3.2.1 登录、注册验证功能 1.8群聊功能 2.0用户信息管理功能 2.13 实验结果 2.2.4 讨论与总结 2.3.5 参考文献 2.3.6 小组分工 2.4.4 / 291 实验内容和要求1.1 实验内容在学习完 TCP/IP 协议组后,要求掌握基于此协议实现网络通信,理解 TCP 与 UDP 的不同特征以及实现方式。基于 Windows 平台建立一个基于 TCP/IP 协 议的网络通讯小应用,实验可采用 UDP 或 TCP 实现。1.2 实验要求( 1)能够进行用户管理, 所有用户必须登录到服务器,

3、有服务器维护在线信息; ( 2) IM 功能:用户登录后能够进行实时多方点到点短信息通信,如聊天;(3) 能够选择要求服务器进行转发服务;(4) 能够保存通信记录到数据库(SQL Server或者其他桌面型数据库或数据文 件);( 5)能进行双方文件传输,能够显示进度;*( 6)支持断点重传,检查时需有功能随时中断传送,并在下次启动时能显示重 传状态;* ( 7)数据包加密;* ( 8)实时语音双向传送功能;* ( 9)多方通话功能;( 10)界面设计要求布局合理,信息清晰。( 11)自加功能。( * 为选做内容)1.3 实验实现的功能( 1)服务器能够进行用户管理,所有用户必须登录到服务器,

4、有服务器维护在 线信息;( 2) IM 功能:用户登录后能够进行实时多方点到点短信息通信,如聊天;( 3)服务器离线转发功能;( 4)客户端保存群聊天记录;( 5)能进行双方文件传输,能够显示进度;( 10)界面设计要求布局合理,信息清晰。2 实验过程2.1 系统需求分析客户端(1)登陆功能:在用户填写相关的账户和密码时,客户端能够发送连接客户端 要求,当,连上客户端的时候, 客户端能够将账号和密码信息发送到服务器进行 核对,并返回信心(2)聊天功能:在客户端中,用户有权选择群聊还是与某在线用户私聊(3)离线聊天功能:在线的用户可能通过服务器将信息发给离线的用户(4)接受离线信息共能:当用户上

5、线时,接收其他用户的离线信息(5)聊天记录功能:客户端能自动将群聊的信息保存在相应的数据库当中(6)显示用户状态功能:对于在线的用户和离线的用户能够及时显示在表格当 中服务器(1)维护用户功能:添加新用户,修改用户密码,删除用户(2)更新用户状态功能:通知客户端更新成员状态和相应的列表(3)离线功能:为离线用户保存离线信息,并且在用户上线的时发送相应的离 线信息(4)检验用户信息功能:验证用户的账号和密码的正确性,并禁止用户异地同 时登陆(5)显示群聊记录:在服务器中几时显示群聊的信息2.2系统的概要设计图2.1软件功能模块图服务器Socket1II4Listening11 h_L1*客户So

6、cketAccept容户1i! .Input/OutputjInput/Outputii1Close«Close图2.2服务器与客户端功能的设计服务器图2.3服务器与客户端数据流程图 2.3具体实现客户端登陆功能图2.4登陆界面(1) 在按下登陆按钮的时候,程序获取界面中的服务器中IP地址和端口号,同时检验账号和密码是否有误。若账号和密码填写上没有错误,进行连接服务器 代码如下:Private Sub Comma nd1_Click()'点击登陆按钮Form2.log in = False'设置能否登陆标志为“不能”= = "" The n'

7、;检查账号和密码填写是否有空MsgBox "请输入账号和密码"ElseCall tcpClie nt_Conn ect'连接服务器DoEve nts'若连接上服务器则发送账号和密码"|" & "*"& &"*" & "#" & & "#" & "|"'* 账号*# 密码 #DoEve ntsElseMsgBox "没有服务器"End IfTimer1.E n

8、abled = TrueEnd IfEnd SubPublic Sub tcpClie nt_Co nn ect()If Form2.tcpClie nt.State <> 7 The nForm2.tcpClie nt.CloseForm2.tcpClie nt.C onnectDoEve ntsEnd IfEnd Sub(2) 当连接成功后,发送账号和密码,用相关的已经定义好协议进行封装发送 给服务器。协议是*账号*#密码#代码如下:If Form2.tcpClie nt.State = 7 The n'若连接上服务器则发送账号和密码Form2.tcpClient.Se

9、ndData "|" & "*"& Form1.Username.Text &"*" & "#" & Form1.Usercode.Text & "#" & "|"'* 账号 *# 密码 #(3)当客户端收到的服务器的协议信息是密码和账号是正确的时候才能进行真 正的登录。协议是:当收到*#时,代表登录成功。当收到*ERROR时,代表没有这账号。当 收到#ERROR时,代表密码错误。当收到*ONLINE时,代表账号

10、已经登录。 代码如下:If In Str(sData, "*#") <> 0 The nlogi n = TrueElself In Str(sData, "*ERROR") <> 0 The n MsgBox "没有这账号"Elself In Str(sData, "#ERROR") <> 0 The n MsgBox "密码错误"ElseIf In Str(sData, "*ONLINE") <> 0 The n MsgBo

11、x "账号已经登录"End If 231.2聊天功能(1)群聊天。在图2.2的文本框中输入字符,便可以发送信息。发送的协议:$群聊天信息$,通过进行过协议封装的聊天信息,能够让服务器进行识别, 别且转发给在线用户。图2.5聊天窗口Private Sub cmdSe nd_Click()If txtOut.Text = "" The nMsgBox "发送内容不能为空"Exit SubEnd IftcpClient.SendData "$" + + ":" & txtOut.Text +&

12、quot;$"'=插入聊天记录a = CStr(Now() + Chr(10) + + " :" + txtOut.Text +Chr(10)Set rs = cn .Execute("i nsert into data (tcp_data) values ('" & a & "')") 'tcp_data是表的列名'=插入聊天记录 rtb In .Text = rtbl n. Text & Chr(10) + CStr(Now() + Chr(10) + &q

13、uot;:" + txtOut.Text + Chr(10)txtOut.Text =""rtbI n.SelStart = Len (rtb In .Text)End Sub(2)发送私聊信息。在listviews中点击相应的用户名字就可以进行私聊,在登陆的时候已经设置好TCP空件的端口号。代码如下:Public Sub set_privatechat()For i = 1 To Form2.ListView1. ListItems.Cou ntPrivate_Chat(i).Clie ntSer.ClosePrivate Chat(i).Clie ntSer.

14、LocalPort = 8080 + iPrivate_Chat(i).Clie ntSer.Liste nNextEnd Sub(3) 接收在线私聊信息。Private Sub Clie ntCli_DataArrival(ByVal bytesTotal As Long) Clie ntCli.GetData str, vbStri ngText1.Text = Text1.Text & strText1.SelStart = Len (Text1.Text)'If Me.Wi ndowState = 1 The n'Timer2.E nabled = True&#

15、39;End IfEnd SubPrivate Sub Clie ntSer_DataArrival(ByVal bytesTotal As Long) ClientSer.GetData str, vbString|Text1.Text = Text1.Text & strText1.SelStart = Len (Text1.Text)'If Me.Wi ndowState = 1 The n|'Timer2.E nabled = True'End If离线聊天功能在输入框中输入私聊信息时,先判断是否在线,假如是在线的话直接利用已 经和对方连接的TCP控件进

16、行发送信息。假如是离线用户的话,利用协议将封 装好的离线信息发送给服务器,在通过服务器发送给离线的用户。离线信息协 议:%*1发送者账号*1*2接收者账号*2*$离线的信息*$%代码如下:Private Sub Comma nd1_Click()Dim str As StringIf Len( Text2.Text) = 0 The nMsgBox ("发送内容不能为空!")Exit SubEnd If& "" & Time & Chr(13) & Chr(10) & Text2.Text str = str &a

17、mp; Chr(13) & Chr(10) & Chr(13) & Chr(10)If Clie ntSer.State = 7 The nClie ntSer.Se ndData str'MsgBox "已连接上对方"Elself Clie ntCli.State = 7 The nClientCli.SendData strEnd IfIf Clie ntCli.State <> 7 And Clie ntSer.State <> 7 The n'离线信息设置+ "*1" + Label

18、2.Caption + "*1" + "*2"+ Label3.Captio n + "*2" + "*$" + str + "*$" + "%"DoEve ntsEnd IfTextl.Text = Textl.Text & strTextl.SelStart = Len (Textl.Text)Text2.Text =""End Sub图2.6私聊对话框231.4接受离线信息功能接收离线私聊信息。当收到服务器的离线信息时,对发送过来的字符串进行

19、 信息提取,提取出发送者、接收者和信息。|Fun cti on check_outl in emessage(message As Stri ng)sender wherel = 0reciever where1 = 0outmessage_where1 = 0sender where2 = 0reciever where2 = 0outmessage where2 = 0sen der where1 =In Str(se nder_where2 + 1, message, "*1")sen der_where2 =In Str(se nder_where1 + 1, me

20、ssage, "*1")sen der = Mid(message, sen der_where1 + 3, sen der_where2 - sen der_where1-3)If In Str(message, "*2") <> 0 The n Dooutmessage_where1 =In Str(outmessage_where2 + 1, message, "*$outmessage_where2 =In Str(outmessage_where1 + 1, message, "*$outmessage = Mi

21、d(message, outmessage_where1+ 4, outmessage_where2-outmessage_where1 - 4)For n = 1 To Form2. ListView1. Listltems.Cou ntPrivate_Chat( n).Text1.Text = Private_Chat( n).Text1.Text & outmessageNextLoop Until In Str(se nder where2 + 1, message, "*1") = 0 End IfEnd Fun cti on 231.5聊天记录功能(1)

22、读取数据库中的聊天信息。添加 VB的控件ADO, ADO控件建立起读取 聊天记录的桌面型数据库access读取数据库中信息,如图2.4。代码如下:Public cn As ADODB.Co nn ectio nPublic rs As ADODB.RecordsetSub adddata()Set cn = New ADODB.Co nn ectio n&App.Path & "data.mdb;Persist Security In fo=False"cn. Ope nSet rs = cn .Execute("select * from dat

23、a")End Sub图2.7数据库的信息当按下群聊天记录的时候弹出对应的RichTextBox控件如下图图2.8群聊天记录对话框(2)将群聊天信息加入到数据库。提取$与$之间的群聊天信息If InStr(sData, "$") <> 0 Then group_chat1 = In Str(sData, "$") group chat2 = In Str(group chat1 + 1, sData, "$") ssData = Mid(sData, group_chat1 + 3, group_chat2 - g

24、roup_chat1 - 3) '=插入聊天记 录a = CStr(Now() + Chr(10) + ssData + Chr(10)Set rs = cn .Execute("i nsert into data (tcp_data) values ('" & a & "')")'tcp_data是表的列名'=插入聊天记 录rtbl n. Text = rtbl n. Text + Chr(10) + CStr(Now() + Chr(10) + ssData +Chr(10)|rtbl n. SelStart = Len( rtbl n.Text)End IfCall check_usero nli ne(sData)Call set_privatechat 231.6显示用户状态功能(1)

温馨提示

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

评论

0/150

提交评论