【正文】
erName = Trim() If userName = Then MsgBox 姓名不能為空! Exit Sub End If Load frmClient = FalseEnd SubPrivate Sub Form_Load() Dim filepath As String sysfilepath = (1)If (sysfilepath amp。 \) = True Then Exit SubElse MsgBox (!準(zhǔn)備安裝.....) If () = True Then Set fil = () (sysfilepath amp。 \) MsgBox (!) Else MsgBox (,安裝失敗!) End IfEnd If 建立并監(jiān)聽鏈接Public Function ReadServerIP(filename As String) As String Dim ss As String cs = ss = Open filename For Input As 1 Line Input 1, ss Close 1 ReadServerIP = Mid(ss, 2, Len(ss) 2)End Function 禁言與踢出功能的實現(xiàn)Private Sub Command1_Click() Dim index As Integer Dim S As String Dim recUser As String S = Trim() = recUser = If recUser = 所有人 Then If S = SystemOrder:禁言 Then For i = 0 To MaxChan 1 userState(i) = 2 Next End If Else index = FindSckIndex(recUser) If S = SystemOrder:禁言 Then userState(index) = 2 Call SendToOne(S, index) End If If recUser = 所有人 Then If S = SystemOrder:踢出 Then For i = 0 To MaxChan 1 userState(i) = 3 Next End If Else index = FindSckIndex(recUser) If S = SystemOrder:踢出 Then userState(index) = 3 Call SendToOne(S, index) End If S = 對 amp。 recUser amp。 說: amp。 S Call AddToText1(S) End Sub If s = SystemOrder:踢出 Then MsgBox 很抱歉,你被管理員踢出! Unload Me Exit Sub End If If s = SystemOrder:禁言 Then n = 1 MsgBox 很抱歉,你被管理員禁言! 39。Unload Me Exit Sub End If 私聊與公聊的實現(xiàn) Private Sub cmdSend_Click() Dim recUser As String If n 1 Then recUser = If 所有人 Then recUser = amp。 recUser amp。 If = 0 Or = 所有人 Then amp。 userName amp。 amp。 對 amp。 recUser amp。 說: amp。 DoEvents Else amp。 038868SendToOne amp。 amp。 userName amp。 amp。 悄悄對 amp。 recUser amp。 說: amp。 DoEvents End If = ElseEnd sub 運行與調(diào)試第四部分:課程設(shè)計心得體會通過此次課程設(shè)計,實踐鞏固了《通信網(wǎng)原理》課程中學(xué)到的知識,并在實踐中練習(xí)了TCP/IP協(xié)議的使用。在滑動窗口協(xié)議的仿真中,由于能力不足,只能簡單的做了一比特滑動窗口協(xié)議即停等協(xié)議的仿真,而且沒有做到可視化界面,總體來說不盡人意。網(wǎng)絡(luò)即時通訊程序的編寫絕大部分由自己完成,僅在網(wǎng)上和書上參考查找了部分內(nèi)容。此次課程設(shè)計不光是《通信網(wǎng)原理》課程的延伸,也是對以后網(wǎng)絡(luò)基礎(chǔ)的鋪墊。還有通過自己動手編寫程序,鍛煉了我的編程能力。第五部分:參考文獻(xiàn)(1) 吳功宜、吳英編著.《計算機(jī)網(wǎng)絡(luò)技術(shù)教程——自頂向下的分析與設(shè)計方法》.北京:機(jī)械工業(yè)出版社,2010(2) 謝希仁.《計算機(jī)網(wǎng)絡(luò)》(第4版).北京:電子工業(yè)出版社.(3) 劉韜,駱娟《Visual Basic 數(shù)據(jù)庫通用模塊及電信系統(tǒng)開發(fā)》。機(jī)械工業(yè)出版社第六部分:附錄 滑動窗口協(xié)議仿真include include define MAXSIZE 10 /*窗口大小,即隊列大小*/int i=0。 /*全局變量,代表當(dāng)前指向確認(rèn)表的位置*/typedef struct /*發(fā)送窗口每幀的數(shù)據(jù)*/{ int snum。 int timeout。/*非0時代表發(fā)送計時,=6時表明超時*/}send。typedef struct /*發(fā)送窗口*/{ send s[MAXSIZE]。 int front。 int rear。}wsend。typedef struct /*接收窗口*/{ int r[MAXSIZE]。 int front。 int rear。}wrece。void Init(wsend *ws,wrece *wr) /*對發(fā)送和接收窗口進(jìn)行初始化*/{ wsfront=wsrear=0。 wrfront=wrrear=0。}int SEND(wsend *ws,wrece *wr,int frame){ if((wsrear+1)%MAXSIZE==wsfront)return 0。 /*發(fā)送窗口已滿*/ if(wsfront==wsrear) /*若窗口為空,則直接進(jìn)入*/ { wss[wsrear].snum=frame。 wss[wsrear].timeout=1。 wsrear=(wsrear+1)%MAXSIZE。 wrr[wrrear]=frame。 wrrear=(wrrear+1)%MAXSIZE。 return 1。 } else /*若窗口不為空,則判斷是否是可傳送的幀*/ { if(frame==(wss[wsrear1].snum)+1) { wss[wsrear].snum=frame。 wss[wsrear].timeout=1。 wsrear=(wsrear+1)%MAXSIZE。 wrr[wrrear]=frame。 wrrear=(wrrear+1)%MAXSIZE。 return 1。 } else if(frame(wss[wsrear1].snum)+1)printf(該幀已發(fā)送?。n)。 else if(frame(wss[wsrear1].snum)+1)printf(該幀不可發(fā)送??!\n)。 }}int RECE(wrece *wr,int frame,int ack[]){ if(wrfront==wrrear) return 0。 /*接收窗口為空*/ else /*接收窗口接收幀號,并返回確認(rèn)*/ { if(wrr[wrfront]==frame) { wrfront=(wrfront+1)%MAXSIZE。 printf(第%d幀出接收窗口,向發(fā)送窗口返回確認(rèn)。\n,frame)。 ack[i]=frame。 i++。 } else printf(該幀不是期望收到的幀,舍棄。\n)。 return 1。 }}int ACKNOWLEDGE(wsend *ws,int ack[]){ int j。 if(wsfront==wsrear) return 0。 /*發(fā)送窗口為空*/ if(ack[0]==wss[wsfront].snum) /*發(fā)送窗口進(jìn)行確認(rèn)處理*/ { wsfront=(wsfront+1)%MAXSIZE。 for(j=0。ji。j++) ack[j]=ack[j+1]。 printf(發(fā)送窗口收到確認(rèn),窗口向后移動。\n)。 i。 return 1。 } else printf(無確認(rèn)信息??!\n)。}void PRINT(wsend *ws,wrece *wr){ int a,b。 a=wsfront。 b=wrfront。 printf(發(fā)送窗口:)。 while(awsrear) { printf(%3d ,wss[a])。 a++。 } printf(\n)。 printf(接收窗口:)。 while(bwrrear) { printf(%3d ,wrr[b])。 b++。 } printf(\n)。}main(){ int frame,a,flag=0。 /*frame幀號,a指向窗口當(dāng)前位置,flag是否有重發(fā)(0沒有,1有)*/ int err。 char end=39。n39。,ch,ACK。 int ack[5]。 /*定義一個可存儲5個確認(rèn)信息的*/ wsend *ws。 wrece *wr。 ws=(wsend *)malloc(sizeof(wsend))。 wr=(wrece *)malloc(sizeof(wrece))。 Init(ws,wr)。 printf(程序開始運行\(zhòng)n)。 while(end!=39。y39。amp。amp。end!=39。Y39。)