華南農(nóng)業(yè)大學計算機網(wǎng)絡課程設計報告_第1頁
華南農(nóng)業(yè)大學計算機網(wǎng)絡課程設計報告_第2頁
華南農(nóng)業(yè)大學計算機網(wǎng)絡課程設計報告_第3頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、華南農(nóng)業(yè)大學理學院課程實驗(設計)報告專業(yè)年級:11信息與計算科學學生學號:201130760學生學號:201130760學生姓名:學生姓名:實驗題目:Socket應用程序設計指導老師:實驗時間:2013年11月1日-2013年11月29日2 / 29目錄1 實驗內(nèi)容和要求 1.1.1實驗內(nèi)容 1.1.2實驗要求 1.1.3 實驗實現(xiàn)的功能 1.2 實驗過程 2.2.1 系統(tǒng)需求分析 2.2.1.1 客戶端 2.服務器 2.2.2 系統(tǒng)的概要設計 3.2.3具體實現(xiàn) 4.客戶端 4.登陸功能 4.聊天功能 6.2.3.1.3 離線聊天功能 7.2.3.1.4 接受離線信息功能 8.2.3.1.

2、5 聊天記錄功能 9.顯示用戶狀態(tài)功能 11文件傳輸功能 1.2服務器 1.82.3.2.1 登錄、注冊驗證功能 1.8群聊功能 2.0用戶信息管理功能 2.13 實驗結(jié)果 2.2.4 討論與總結(jié) 2.3.5 參考文獻 2.3.6 小組分工 2.4.4 / 291 實驗內(nèi)容和要求1.1 實驗內(nèi)容在學習完 TCP/IP 協(xié)議組后,要求掌握基于此協(xié)議實現(xiàn)網(wǎng)絡通信,理解 TCP 與 UDP 的不同特征以及實現(xiàn)方式。基于 Windows 平臺建立一個基于 TCP/IP 協(xié) 議的網(wǎng)絡通訊小應用,實驗可采用 UDP 或 TCP 實現(xiàn)。1.2 實驗要求( 1)能夠進行用戶管理, 所有用戶必須登錄到服務器,

3、有服務器維護在線信息; ( 2) IM 功能:用戶登錄后能夠進行實時多方點到點短信息通信,如聊天;(3) 能夠選擇要求服務器進行轉(zhuǎn)發(fā)服務;(4) 能夠保存通信記錄到數(shù)據(jù)庫(SQL Server或者其他桌面型數(shù)據(jù)庫或數(shù)據(jù)文 件);( 5)能進行雙方文件傳輸,能夠顯示進度;*( 6)支持斷點重傳,檢查時需有功能隨時中斷傳送,并在下次啟動時能顯示重 傳狀態(tài);* ( 7)數(shù)據(jù)包加密;* ( 8)實時語音雙向傳送功能;* ( 9)多方通話功能;( 10)界面設計要求布局合理,信息清晰。( 11)自加功能。( * 為選做內(nèi)容)1.3 實驗實現(xiàn)的功能( 1)服務器能夠進行用戶管理,所有用戶必須登錄到服務器,

4、有服務器維護在 線信息;( 2) IM 功能:用戶登錄后能夠進行實時多方點到點短信息通信,如聊天;( 3)服務器離線轉(zhuǎn)發(fā)功能;( 4)客戶端保存群聊天記錄;( 5)能進行雙方文件傳輸,能夠顯示進度;( 10)界面設計要求布局合理,信息清晰。2 實驗過程2.1 系統(tǒng)需求分析客戶端(1)登陸功能:在用戶填寫相關(guān)的賬戶和密碼時,客戶端能夠發(fā)送連接客戶端 要求,當,連上客戶端的時候, 客戶端能夠?qū)①~號和密碼信息發(fā)送到服務器進行 核對,并返回信心(2)聊天功能:在客戶端中,用戶有權(quán)選擇群聊還是與某在線用戶私聊(3)離線聊天功能:在線的用戶可能通過服務器將信息發(fā)給離線的用戶(4)接受離線信息共能:當用戶上

5、線時,接收其他用戶的離線信息(5)聊天記錄功能:客戶端能自動將群聊的信息保存在相應的數(shù)據(jù)庫當中(6)顯示用戶狀態(tài)功能:對于在線的用戶和離線的用戶能夠及時顯示在表格當 中服務器(1)維護用戶功能:添加新用戶,修改用戶密碼,刪除用戶(2)更新用戶狀態(tài)功能:通知客戶端更新成員狀態(tài)和相應的列表(3)離線功能:為離線用戶保存離線信息,并且在用戶上線的時發(fā)送相應的離 線信息(4)檢驗用戶信息功能:驗證用戶的賬號和密碼的正確性,并禁止用戶異地同 時登陸(5)顯示群聊記錄:在服務器中幾時顯示群聊的信息2.2系統(tǒng)的概要設計圖2.1軟件功能模塊圖服務器Socket1II4Listening11 h_L1*客戶So

6、cketAccept容戶1i! .Input/OutputjInput/Outputii1Close«Close圖2.2服務器與客戶端功能的設計服務器圖2.3服務器與客戶端數(shù)據(jù)流程圖 2.3具體實現(xiàn)客戶端登陸功能圖2.4登陸界面(1) 在按下登陸按鈕的時候,程序獲取界面中的服務器中IP地址和端口號,同時檢驗賬號和密碼是否有誤。若賬號和密碼填寫上沒有錯誤,進行連接服務器 代碼如下:Private Sub Comma nd1_Click()'點擊登陸按鈕Form2.log in = False'設置能否登陸標志為“不能”= = "" The n'

7、;檢查賬號和密碼填寫是否有空MsgBox "請輸入賬號和密碼"ElseCall tcpClie nt_Conn ect'連接服務器DoEve nts'若連接上服務器則發(fā)送賬號和密碼"|" & "*"& &"*" & "#" & & "#" & "|"'* 賬號*# 密碼 #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) 當連接成功后,發(fā)送賬號和密碼,用相關(guān)的已經(jīng)定義好協(xié)議進行封裝發(fā)送 給服務器。協(xié)議是*賬號*#密碼#代碼如下:If Form2.tcpClie nt.State = 7 The n'若連接上服務器則發(fā)送賬號和密碼Form2.tcpClient.Se

9、ndData "|" & "*"& Form1.Username.Text &"*" & "#" & Form1.Usercode.Text & "#" & "|"'* 賬號 *# 密碼 #(3)當客戶端收到的服務器的協(xié)議信息是密碼和賬號是正確的時候才能進行真 正的登錄。協(xié)議是:當收到*#時,代表登錄成功。當收到*ERROR時,代表沒有這賬號。當 收到#ERROR時,代表密碼錯誤。當收到*ONLINE時,代表賬號

10、已經(jīng)登錄。 代碼如下: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 "賬號已經(jīng)登錄"End If 231.2聊天功能(1)群聊天。在圖2.2的文本框中輸入字符,便可以發(fā)送信息。發(fā)送的協(xié)議:$群聊天信息$,通過進行過協(xié)議封裝的聊天信息,能夠讓服務器進行識別, 別且轉(zhuǎn)發(fā)給在線用戶。圖2.5聊天窗口Private Sub cmdSe nd_Click()If txtOut.Text = "" The nMsgBox "發(fā)送內(nèi)容不能為空"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)發(fā)送私聊信息。在listviews中點擊相應的用戶名字就可以進行私聊,在登陸的時候已經(jīng)設置好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離線聊天功能在輸入框中輸入私聊信息時,先判斷是否在線,假如是在線的話直接利用已 經(jīng)和對方連接的TCP控件進

16、行發(fā)送信息。假如是離線用戶的話,利用協(xié)議將封 裝好的離線信息發(fā)送給服務器,在通過服務器發(fā)送給離線的用戶。離線信息協(xié) 議:%*1發(fā)送者賬號*1*2接收者賬號*2*$離線的信息*$%代碼如下:Private Sub Comma nd1_Click()Dim str As StringIf Len( Text2.Text) = 0 The nMsgBox ("發(fā)送內(nèi)容不能為空!")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接受離線信息功能接收離線私聊信息。當收到服務器的離線信息時,對發(fā)送過來的字符串進行

19、 信息提取,提取出發(fā)送者、接收者和信息。|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、讀取數(shù)據(jù)庫中的聊天信息。添加 VB的控件ADO, ADO控件建立起讀取 聊天記錄的桌面型數(shù)據(jù)庫access讀取數(shù)據(jù)庫中信息,如圖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數(shù)據(jù)庫的信息當按下群聊天記錄的時候彈出對應的RichTextBox控件如下圖圖2.8群聊天記錄對話框(2)將群聊天信息加入到數(shù)據(jù)庫。提取$與$之間的群聊天信息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顯示用戶狀態(tài)功能(1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論