版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 一、課程設(shè)計(jì)(論文)題目 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì) </p><p> 二、課程設(shè)計(jì)(論文)工作自 2012 年 6 月 18 日起至 2012 年 6 月 22 日止。</p><p> 三、課程設(shè)計(jì)(論文) 地點(diǎn): 創(chuàng)新大樓405有線網(wǎng)絡(luò)實(shí)驗(yàn)室。
2、 </p><p> 四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p> 1.本課程設(shè)計(jì)的目的</p><p> 通過課程設(shè)計(jì),使學(xué)生理論聯(lián)系實(shí)際,在實(shí)踐中進(jìn)一步了解計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu),深入理解</p><p> TCP/IP參考模型,掌握各種網(wǎng)絡(luò)工程技術(shù)和網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì),初步掌握綜合布線
3、技術(shù)、高速</p><p> 局域網(wǎng)技術(shù)、廣域網(wǎng)接入技術(shù)、網(wǎng)絡(luò)互聯(lián)技術(shù),初步掌握網(wǎng)絡(luò)應(yīng)用程序開發(fā)技術(shù)以及互聯(lián)網(wǎng)</p><p> 的應(yīng)用技術(shù)。培養(yǎng)學(xué)生分析、解決問題的能力,提高學(xué)生的科技論文寫作能力。</p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)基本要求:</b></p>
4、<p> ?。?)熟悉交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)備的功能和使用;</p><p> ?。?)掌握網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì),掌握網(wǎng)絡(luò)安全與管理技術(shù);</p><p> ?。?)初步掌握網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)技術(shù)和互聯(lián)網(wǎng)應(yīng)用技術(shù)。</p><p> 2)課程設(shè)計(jì)論文編寫要求</p><p> ?。?)理論設(shè)計(jì)部分以課程設(shè)計(jì)論文的形式提交,格式必須按照
5、課程設(shè)計(jì)論文標(biāo)準(zhǔn)格式進(jìn)行</p><p><b> 書寫和裝訂。</b></p><p> ?。?)課程設(shè)計(jì)報(bào)告(論文)包括目錄、緒論、正文、設(shè)計(jì)小結(jié)、參考文獻(xiàn)、附錄等</p><p> 3)課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn): </p><p> (1)考勤與學(xué)習(xí)態(tài)度:20分</p><p> ?。?)理論
6、理解與課程設(shè)計(jì)報(bào)告論文:40分; </p><p> (3)動(dòng)手操作與實(shí)驗(yàn)設(shè)計(jì):20分;</p><p> (4)設(shè)計(jì)論文答辯:20分。</p><p><b> 4)參考文獻(xiàn): </b></p><p> [1]謝希仁,《計(jì)算機(jī)網(wǎng)絡(luò)》[M].北京:電子工業(yè)出版社,2008</p><p&g
7、t; [2]鄭小平,《Visual C#.NET 開發(fā)實(shí)踐》[M].北京:人民郵電出版社,2001</p><p> [3]譚獻(xiàn)海,《網(wǎng)絡(luò)編程技術(shù)及應(yīng)用》[M].北京:清華大學(xué)出版社,2006</p><p> 5)課程設(shè)計(jì)進(jìn)度安排</p><p> 內(nèi)容 天數(shù)
8、 地點(diǎn)</p><p> 1.選擇設(shè)計(jì)題目、了解設(shè)計(jì)目的要求、查閱相關(guān)理論資料 1天 圖書館、機(jī)房</p><p> 2.設(shè)計(jì)方案選型及實(shí)驗(yàn)室完成相關(guān)的設(shè)計(jì)任務(wù) 2天 實(shí)驗(yàn)室 </p><p> 3.總結(jié)課程設(shè)計(jì)任務(wù)和設(shè)計(jì)步驟,撰寫課程設(shè)計(jì)論文 2天 圖書館、機(jī)房、實(shí)驗(yàn)室</p>
9、<p> 學(xué)生簽名: </p><p> 2012 年6月18日</p><p> 6)選擇課程設(shè)計(jì)題目具體要求:</p><p> 基于TCP的點(diǎn)到點(diǎn)聊天程序設(shè)計(jì)</p><p><b> 具體要求:</b></p><p> 理解基于TCP的網(wǎng)絡(luò)編程技術(shù)
10、,分析點(diǎn)到點(diǎn)聊天程序設(shè)計(jì)原理和程序流程,選擇合適的開發(fā)環(huán)境,設(shè)計(jì)實(shí)現(xiàn)點(diǎn)到點(diǎn)聊天功能的應(yīng)用程序。</p><p><b> 設(shè)計(jì)論文內(nèi)容要求:</b></p><p> 分析winsock編程技術(shù);</p><p> 分析點(diǎn)到點(diǎn)聊天程序的功能及其相關(guān)網(wǎng)絡(luò)協(xié)議;</p><p> 給出點(diǎn)到點(diǎn)聊天程序流程圖和設(shè)計(jì)方案;
11、</p><p> 選擇開發(fā)環(huán)境,編譯源程序;</p><p><b> 給出軟件測(cè)試文檔;</b></p><p><b> 設(shè)計(jì)小結(jié);</b></p><p> 參考文獻(xiàn)(包括互聯(lián)網(wǎng)上的引用信息)。</p><p> 課程設(shè)計(jì)(論文)評(píng)審意見</p>
12、<p> ?。?)考勤與學(xué)習(xí)態(tài)度(20分):優(yōu)(?。⒘迹ā。?、中( )、一般( )、差( ); </p><p> ?。?)理論理解與課程設(shè)計(jì)報(bào)告論文(40分):優(yōu)( )、良(?。⒅校ā。?、一般(?。⒉睿ā。?</p><p> (3)動(dòng)手操作與實(shí)驗(yàn)設(shè)計(jì) ?。?0分):優(yōu)(?。⒘迹ā。⒅校ā。?、一般(?。?、差(?。?;</p><p>
13、(4)設(shè)計(jì)論文答辯 ?。?0分):優(yōu)(?。?、良( )、中( )、一般(?。?、差(?。?;</p><p> ?。?)格式規(guī)范性及考勤是否降等級(jí):是( )、否( )</p><p><b> 目錄</b></p><p><b> 第一章 緒論1</b></p><p> 1.1 聊天工具發(fā)展現(xiàn)
14、狀和趨勢(shì)1</p><p> 1.2 課程設(shè)計(jì)的目的和意義1</p><p> 1.3課程設(shè)計(jì)的任務(wù)及要求2</p><p> 第二章 開發(fā)工具及相關(guān)技術(shù)3</p><p> 2.1 C#概述3</p><p> 2.2 TCP/ IP概述3</p><p> 2.3 C
15、/S模式5</p><p> 2.4 winsock編程技術(shù)6</p><p> 第三章 基于TCP的C/S聊天程序的詳細(xì)設(shè)計(jì)方案8</p><p> 3.1 TCP設(shè)計(jì)思路8</p><p> 3.2 客戶端2編程步驟9</p><p> 3.3 客戶端1(帶服務(wù)器性質(zhì))編程步驟11</p
16、><p> 第四章 聊天程序的功能分析13</p><p> 4.1 程序的使用流程13</p><p> 4.2 程序的相關(guān)介紹17</p><p> 4.2結(jié)果分析17</p><p> 第五章 實(shí)驗(yàn)心得體會(huì)18 </p><p><b> 參考文獻(xiàn)19 <
17、;/b></p><p> 附錄1 TCP客戶端1(帶服務(wù)器性質(zhì))源程序19</p><p> 附錄2 TCP客戶端2源程序22 </p><p><b> 第一章 緒論</b></p><p> 1.1聊天工具發(fā)展現(xiàn)狀和趨勢(shì)</p><p> 自進(jìn)入信息化社會(huì)以來(lái),人們的生活
18、發(fā)生了翻天覆地的變化,所有這一切的實(shí)現(xiàn)都要?dú)w功于計(jì)算機(jī)網(wǎng)絡(luò)。自從計(jì)算機(jī)網(wǎng)絡(luò)出現(xiàn)以來(lái),網(wǎng)絡(luò)發(fā)展越來(lái)越迅速,其重要性更是不可估量?,F(xiàn)在,網(wǎng)絡(luò)已經(jīng)進(jìn)入到我們生活的各個(gè)角落,大到網(wǎng)上理財(cái)、網(wǎng)上會(huì)議、網(wǎng)上戰(zhàn)爭(zhēng),小到上網(wǎng)購(gòu)物、查找資料,網(wǎng)上聊天等,可以說(shuō)網(wǎng)絡(luò)把我們的世界變“小”了,即使在天涯海角,我們也可以隨時(shí)聯(lián)系。一個(gè)最簡(jiǎn)單且應(yīng)用最廣泛的例子——網(wǎng)上聊天,就是最好的證明。本課程設(shè)計(jì)將基于TCP和UDP協(xié)議,使用C#語(yǔ)言分別實(shí)現(xiàn)一個(gè)C/S聊天程序。
19、隨著社會(huì)的不斷發(fā)展進(jìn)步,電腦不斷的普及,網(wǎng)絡(luò)聊天工具越來(lái)越受到大家的歡迎,特別是像QQ這樣的操作簡(jiǎn)單,工能全面的聊天軟件更是流行,已經(jīng)成為很多人必不可少的聊天工具。</p><p> 本程序是模擬QQ基于TCP協(xié)議的聊天工具,并且應(yīng)用winsock編程技術(shù),根據(jù)QQ聊天的相關(guān)協(xié)議來(lái)實(shí)現(xiàn)的。通過該程序的制作,我很好的學(xué)習(xí)了網(wǎng)絡(luò)軟件編程知識(shí)。</p><p> 1.2 課程設(shè)計(jì)的目的和意義
20、</p><p> 通過課程設(shè)計(jì),使學(xué)生理論聯(lián)系實(shí)際,在實(shí)踐中進(jìn)一步了解計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu),深入理解,TCP/IP參考模型,掌握各種網(wǎng)絡(luò)工程技術(shù)和網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì),初步掌握綜合布線技術(shù)、高速局域網(wǎng)技術(shù)、廣域網(wǎng)接入技術(shù)、網(wǎng)絡(luò)互聯(lián)技術(shù),初步掌握網(wǎng)絡(luò)應(yīng)用程序開發(fā)技術(shù)以及互聯(lián)網(wǎng)的應(yīng)用技術(shù)。培養(yǎng)學(xué)生分析、解決問題的能力,提高學(xué)生的科技論文寫作能力。</p><p> 1.3課程設(shè)計(jì)的任務(wù)及要求&l
21、t;/p><p><b> 1)基本要求:</b></p><p> ?。?)熟悉交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)備的功能和使用;</p><p> ?。?)掌握網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì),掌握網(wǎng)絡(luò)安全與管理技術(shù);</p><p> ?。?)初步掌握網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)技術(shù)和互聯(lián)網(wǎng)應(yīng)用技術(shù);</p><p> 2)課程設(shè)計(jì)
22、論文編寫要求</p><p> ?。?)理論設(shè)計(jì)部分以課程設(shè)計(jì)論文的形式提交,格式必須按照課程設(shè)計(jì)論文標(biāo)準(zhǔn)格式進(jìn)行書寫和裝訂。</p><p> (2)課程設(shè)計(jì)報(bào)告(論文)包括目錄、緒論、正文、設(shè)計(jì)小結(jié)、參考文獻(xiàn)、附錄等。</p><p><b> 3)自主要求設(shè)計(jì)</b></p><p> ?。?)掌握TCP的概念
23、和工作原理;</p><p> ?。?)熟練掌握C#語(yǔ)言的編程原理;</p><p> (3)實(shí)現(xiàn)基于TCP協(xié)議的聊天程序設(shè)計(jì);</p><p> (4)運(yùn)行程序,并合理分析實(shí)驗(yàn)結(jié)果。</p><p> 第二章 開發(fā)工具及相關(guān)技術(shù)</p><p><b> 2.1 C#概述</b><
24、/p><p> C#(C Sharp)是微軟(Microsoft)為.NET Framework量身訂做的程序語(yǔ)言,C#擁有C/C++的強(qiáng)大功能以及Visual Basic簡(jiǎn)易使用的特性,是第一個(gè)組件導(dǎo)向(Component-oriented)的程序語(yǔ)言,和C++與Java一樣亦為對(duì)象導(dǎo)向(object-oriented)程序語(yǔ)言。C#具有以下特點(diǎn):</p><p><b> (
25、1)語(yǔ)法簡(jiǎn)潔。</b></p><p> (2)面向?qū)ο笤O(shè)計(jì)。</p><p> ?。?)與Web緊密結(jié)合。</p><p> ?。?)完整的安全性和錯(cuò)誤處理。</p><p><b> ?。?)版本控制。</b></p><p><b> (6)兼容性。</b&g
26、t;</p><p><b> ?。?)靈活性。</b></p><p> 2.2 TCP/IP概述</p><p> 1)什么是TCP/IP</p><p> TCP/IP指的是Internet上使用的兩種網(wǎng)絡(luò)協(xié)議:傳輸控制協(xié)議和網(wǎng)際協(xié)議;事實(shí)上,TCP協(xié)詭計(jì)和IP協(xié)議只是一個(gè)稱為TCP/IP協(xié)議族中的兩種而已。
27、</p><p> TCP/IP協(xié)議族可以將各種操作系統(tǒng)和網(wǎng)絡(luò)部件連接起來(lái),它能提供一種在各種系統(tǒng)間移動(dòng)數(shù)據(jù)的標(biāo)準(zhǔn)方法。這些協(xié)議既可以用于Internet上,也可以用于專用網(wǎng)中。</p><p> TCP/IP 結(jié)構(gòu)中包含兩種傳輸層協(xié)議。其一傳輸控制協(xié)議(TCP),確保信息傳輸過程。其二用戶數(shù)據(jù)報(bào)協(xié)議(UDP),直接傳輸數(shù)據(jù)報(bào),而不需要提供端對(duì)端可靠校驗(yàn)。兩種協(xié)議對(duì)應(yīng)不同的應(yīng)用具有各自
28、功能。</p><p> 2)TCP/IP 體系結(jié)構(gòu)與特點(diǎn) </p><p> ① TCP/IP體系結(jié)構(gòu)</p><p> TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)服務(wù)。TCP/IP包括以下協(xié)議:(結(jié)構(gòu)如圖2.1)</p><p> 圖2.1 TCP/IP體系結(jié)構(gòu)<
29、;/p><p> ?、?TCP/IP特點(diǎn) TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。因此用戶一般不涉及。編程時(shí),編程界面有兩種形式:一、是由內(nèi)核心直接提供的系統(tǒng)調(diào)用;二、使用以庫(kù)函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)實(shí)現(xiàn),后者為核外實(shí)現(xiàn)。用戶服務(wù)要通過核外的應(yīng)用程序才能實(shí)現(xiàn),所以要使用套接字(socket)來(lái)實(shí)現(xiàn)?!?lt;/p>
30、<p> 圖2.2 TCP/IP協(xié)議核心與應(yīng)用程序關(guān)系圖。</p><p><b> 2.3 C/S模式</b></p><p> 在網(wǎng)絡(luò)連接模式中,除對(duì)等網(wǎng)外,還有另一種形式的網(wǎng)絡(luò),即客戶機(jī)/服務(wù)器網(wǎng),Client/Server。在客戶機(jī)/服務(wù)器網(wǎng)絡(luò)中,服務(wù)器是網(wǎng)絡(luò)的核心,而客戶機(jī)是網(wǎng)絡(luò)的基礎(chǔ),客戶機(jī)依靠服務(wù)器獲得所需要的網(wǎng)絡(luò)資源,而服務(wù)器為客
31、戶機(jī)提供網(wǎng)絡(luò)必須的資源。 </p><p> 它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到 Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的Web應(yīng)用發(fā)展,Web和Client/Server 應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和
32、外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。</p><p> C/S工作過程如下:</p><p> 服務(wù)器端描述:S端啟動(dòng)服務(wù)進(jìn)程,并監(jiān)聽相應(yīng)端口。然后,若收到C端發(fā)出的有關(guān)請(qǐng)求,按如下情況給出相應(yīng)的反映:將收到的包進(jìn)行檢測(cè),若收到的包有錯(cuò)則拋棄(discard),并發(fā)給C端一個(gè)negtive ACK。若
33、收到的包正常,則將此包進(jìn)行解包,將內(nèi)容輸出至一臨時(shí)文件;并發(fā)給C端一個(gè)positive ACK。依次收到來(lái)自C端的包,直到收到end為止,并關(guān)閉此進(jìn)程,轉(zhuǎn)回監(jiān)聽狀態(tài)。</p><p> 客戶端描述為:若收到的為Positive ACK,則繼續(xù)發(fā)包;若收到的為Negtive ACK,則將應(yīng)發(fā)的包重發(fā)。直到C端將所有要發(fā)的包都發(fā)完,并都已經(jīng)收到S端的回應(yīng),最后發(fā)一個(gè)End包,直接關(guān)閉此進(jìn)程。</p>
34、<p> 綜上所述,應(yīng)用中的服務(wù)器程序必須先于客戶機(jī)進(jìn)程啟動(dòng),直到對(duì)客戶機(jī)的響應(yīng)結(jié)束或強(qiáng)迫終止。</p><p> 2.4 winsock編程技術(shù)</p><p> Windows Sockets是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),你可以使用Winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP
35、協(xié)議。Winsockets無(wú)疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。</p><p><b> 1)專用術(shù)語(yǔ)</b></p><p><b> ① 套接字</b></p><p> 套接字是網(wǎng)絡(luò)的基本構(gòu)件。它是可以被命名和尋址的通信端點(diǎn),使用中的每一個(gè)套接字都有其類型和一個(gè)與之相連聽進(jìn)程。套接字存在通信區(qū)域(通信區(qū)域又稱地址簇)
36、中。套接字只與同一區(qū)域中的套接字交換數(shù)據(jù)(跨區(qū)域時(shí),需要執(zhí)行某和轉(zhuǎn)換進(jìn)程才能實(shí)現(xiàn))。WINDOWS 中的套接字只支持一個(gè)域——網(wǎng)際域。套接字具有類型?! INDOWS SOCKET 1.1 版本支持兩種套接字:流套接字(SOCK_STREAM)和數(shù)據(jù)報(bào)套接字(SOCK_DGRAM) ?、?WINDOWS SOCKETS 實(shí)現(xiàn) 一個(gè)WINDOWS SOCKETS 實(shí)現(xiàn)是指實(shí)現(xiàn)了WINDOWS SOCKETS規(guī)范所描述的全部功能
37、的一套軟件。一般通過DLL文件來(lái)實(shí)現(xiàn)(WS2_32. DLL)</p><p> ?、?阻塞處理例程 阻塞處理例程(blocking hook,阻塞鉤子)是WINDOWS SOCKETS實(shí)現(xiàn)為了支持阻塞套接字函數(shù)調(diào)用而提供的一種機(jī)制。</p><p> ?、?多址廣播(multicast,多點(diǎn)傳送或組播) 是一種一對(duì)多的傳輸方式,傳輸發(fā)起者通過一次傳輸就將信息傳送到一組接收者,與單
38、點(diǎn)傳送(unicast)和廣播(Broadcast)相對(duì)應(yīng)。</p><p> 2) 面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖</p><p> 圖2-3 系統(tǒng)調(diào)用時(shí)序圖</p><p> 第三章 基于TCP的C/S聊天程序的詳細(xì)設(shè)計(jì)方案</p><p> 3.1 TCP設(shè)計(jì)思路</p><p> 為了簡(jiǎn)化
39、編程,.NET提供面向TCP編程的相關(guān)類,主要包括TcpClient和TcpListener。TcpClient類為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接,它構(gòu)建于Socket類之上,以提供較高級(jí)別的TCP服務(wù),即提供了通過網(wǎng)絡(luò)連接、發(fā)送和接收數(shù)據(jù)的簡(jiǎn)單方法。用于在同步阻止模式下通過網(wǎng)絡(luò)來(lái)連接、發(fā)送和接收流數(shù)據(jù)。另外,通過與NetworkStream對(duì)象的關(guān)聯(lián),使得用戶可以通過流操作方式實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)連接狀態(tài)下數(shù)據(jù)的發(fā)送和接收。通過TcpClient
40、類實(shí)現(xiàn)與TCP主機(jī)的通信流程如下圖所示:</p><p> 圖3-1 TcpClient類通信流程圖</p><p> TcpClient類實(shí)現(xiàn)了客戶端編程抽象,因此構(gòu)建客戶端網(wǎng)絡(luò)應(yīng)用程序便可以直接使用TcpClient取代Socket,更加方便易用。同樣,對(duì)于服務(wù)器端應(yīng)用程序的構(gòu)建,C#提供了TcpListener類。該類也是構(gòu)建于Socket之上,提供了更高抽象級(jí)別的TCP服務(wù),使
41、得程序員能更方便地編寫服務(wù)器端應(yīng)用程序。</p><p> 通常情況下,服務(wù)器端應(yīng)用程序在啟動(dòng)時(shí)將首先綁定本地網(wǎng)絡(luò)接口的IP地址和端口號(hào),然后進(jìn)入偵聽客戶請(qǐng)求的狀態(tài),以便于客戶端應(yīng)用程序提出顯式請(qǐng)求。一旦偵聽到有客戶端應(yīng)用程序請(qǐng)求連接偵聽端口,服務(wù)器端應(yīng)用將接受請(qǐng)求,并建立一個(gè)負(fù)責(zé)與客戶端應(yīng)用程序通信的信道,即通過創(chuàng)建連接套接字與客戶端應(yīng)用程序建立連接,由連接套接字完成與客戶端應(yīng)用程序的數(shù)據(jù)傳送操作,服務(wù)器端應(yīng)
42、用程序繼續(xù)偵聽更多的客戶端連接請(qǐng)求。TcpListener通過實(shí)例創(chuàng)建過程完成與本地網(wǎng)絡(luò)接口的綁定,并由所創(chuàng)建的實(shí)例調(diào)用Start方法啟動(dòng)偵聽;當(dāng)偵聽到客戶端應(yīng)用程序的連接請(qǐng)求后,根據(jù)客戶端應(yīng)用程序的不同請(qǐng)求方式,可以通過AcceptTcpClient方法接受傳入的連接請(qǐng)求并創(chuàng)建TcpClient實(shí)例以處理請(qǐng)求,或者通過AcceptSocket方法接受傳入的連接請(qǐng)求并創(chuàng)建Socket實(shí)例以處理請(qǐng)求,并由所創(chuàng)建的TcpClient實(shí)例或S
43、ocket實(shí)例完成與客戶端應(yīng)用程序的網(wǎng)絡(luò)數(shù)據(jù)傳輸。最后,需要使用Stop關(guān)閉用于偵聽傳入連接的Socket,同時(shí)也必須關(guān)閉從AcceptSocket或AcceptTcpClient返回的任何實(shí)例,以釋放相關(guān)</p><p> 圖3-2 TcpListener 類通信流程圖</p><p> 3.2客戶端2編程步驟</p><p> ?。?)新建一個(gè)客戶端窗口程
44、序:FormClient</p><p> ?。?) 對(duì)窗口程序進(jìn)行界面設(shè)計(jì),由于功能比較簡(jiǎn)單,并沒有做做到盡善盡美,只是做到簡(jiǎn)單的通信與顯示信息,主要用到了三個(gè)主要空間:LlistBoxStatus,TextBox,Button,其中,LlistBoxStatus用來(lái)顯示與服務(wù)器端的連接狀態(tài),兩個(gè)TextBox分別表示接收的信息和準(zhǔn)備發(fā)送的信息,兩個(gè)Button分別用來(lái)表示連接和發(fā)送。將各控件的名字改為有實(shí)際
45、意義,容易標(biāo)記的名字。</p><p><b> ?。?)核心代碼編寫</b></p><p> 進(jìn)入編寫代碼模式,在開頭中添加所要用到的命名空間如:</p><p> using System.Net; //提供一個(gè)統(tǒng)一、簡(jiǎn)單的編程接口</p><p> using System.Net.Sockets;//提供
46、Windows套接字接口的托管實(shí)現(xiàn)</p><p> using System.Threading;//提供類和接口支持線程程序設(shè)計(jì)所需實(shí)現(xiàn)功能</p><p> 如下代碼描述了TcpClient實(shí)例的創(chuàng)建以及與指定遠(yuǎn)程主機(jī)的連接過程。</p><p> myTcpclient = new TcpClient();</p><p>
47、myTcpclient.Connect(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));// 創(chuàng)建實(shí)例</p><p> myNst = myTcpclient.GetStream();//獲取數(shù)據(jù)流</p><p> mySread = new StreamReader(myNst,System.Text.Encodi
48、ng.Default);//創(chuàng)建流讀實(shí)例</p><p> mySwrite = new StreamWriter(myNst,System.Text.Encoding.Default);//創(chuàng)建流寫實(shí)例</p><p> myThread = new Thread(new ThreadStart(Reading));//創(chuàng)建新線程,用新創(chuàng)建線程啟動(dòng)readin函數(shù)</p>
49、<p> myThread.Start();</p><p> MessageBox.Show("連接服務(wù)器成功!");</p><p> 與遠(yuǎn)程主機(jī)連接成功后,利用NetworkStream實(shí)例發(fā)送和接收數(shù)據(jù)。該方法首先通過client.GetStream來(lái)返回NetWorkStream實(shí)例,進(jìn)而利用所獲取的NetworkStream實(shí)例的讀寫方法
50、Write和Read來(lái)發(fā)送和接收數(shù)據(jù),其實(shí)現(xiàn)代碼如下所示:</p><p><b> ?、僮x對(duì)方傳過來(lái)的</b></p><p> for (int i = 0; i < 4; i++) </p><p> { if (i == 0)
51、 {</p><p> string youmsg = "\r\n" + mySread.ReadLine();</p><p> richTextBox1.AppendText(youmsg);</p><p><b> }</b></p><p><b> el
52、se</b></p><p><b> {</b></p><p> string youmsg = "\r\n" + mySread.ReadLine();</p><p> richTextBox1.AppendText(youmsg);</p><p> richTextBo
53、x1.Select(richTextBox1.TextLength - youmsg.Length+1, youmsg.Length);</p><p> richTextBox1.SelectionColor = Color.Red;</p><p><b> }</b></p><p><b> ②發(fā)送到對(duì)方</b&g
54、t;</p><p> string mymsg = DateTime.Now.ToString() + "<" + "來(lái)自:客戶端" + ">" + "\r\n" + richTextBox2.Text + "\r\n" + "\r\n";</p><p>
55、; //MessageBox.Show(mymsg.Length.ToString());</p><p> mySwrite.WriteLine(mymsg);</p><p> mySwrite.Flush();</p><p> richTextBox2.Clear();</p><p> richTextBox1.Appen
56、dText(mymsg);</p><p> richTextBox1.Select(richTextBox1.TextLength - mymsg.Length + 29, mymsg.Length);</p><p> richTextBox1.SelectionColor = Color.Blue;</p><p> 在與服務(wù)器完成通信后,應(yīng)該調(diào)用Clo
57、se( )方法釋放所有的資源。</p><p> 3.3客戶端1(帶服務(wù)器性質(zhì))編程步驟</p><p> (1)新建一個(gè)服務(wù)器端窗口程序:FormServer</p><p> ?。?)對(duì)窗口程序進(jìn)行界面設(shè)計(jì),由于功能比較簡(jiǎn)單,并沒有做做到盡善盡美,只是做到簡(jiǎn)單的通信與顯示信息,主要用到了三個(gè)主要空間:LlistBoxStatus,TextBox,B
58、utton,其中,LlistBoxStatus用來(lái)顯示與客戶端的連接狀態(tài),兩個(gè)TextBox分別表示接收的信息和準(zhǔn)備發(fā)送的信息,三個(gè)Button分別用來(lái)表示開始監(jiān)聽、停止監(jiān)聽和發(fā)送。將各控件的名字改為有實(shí)際意義,容易標(biāo)記的名字。</p><p><b> (3)核心代碼編寫</b></p><p> 進(jìn)入編寫代碼模式,在開頭中添加所要用到的命名空間如:</p
59、><p> using System.Net; //提供一個(gè)統(tǒng)一、簡(jiǎn)單的編程接口</p><p> using System.Net.Sockets;//提供Windows套接字接口的托管實(shí)現(xiàn)</p><p> using System.Threading;//提供類和接口支持線程程序設(shè)計(jì)所需實(shí)現(xiàn)功能</p><p> 創(chuàng)建TcpList
60、ener實(shí)例,調(diào)用Start方法啟動(dòng)偵聽,即該方法調(diào)用TcpListener實(shí)例的基礎(chǔ)Socket上的Listen方法,開始偵聽客戶的連接請(qǐng)求,代碼如下:</p><p> myTcplistener = new TcpListener(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));</p><p> myTcplis
61、tener.Start();</p><p> myTcpserver = myTcplistener.AcceptTcpClient();</p><p> myTcplistener.Stop();</p><p> 當(dāng)偵聽到有客戶連接請(qǐng)求時(shí),使用AcceptTcpClient接收任何當(dāng)前在隊(duì)列中掛起的連接請(qǐng)求,并返回一個(gè)TcpClient實(shí)例以接受客戶的
62、連接請(qǐng)求,如下面代碼所示:</p><p> myNetst = myTcpserver.GetStream();</p><p> mySread = new StreamReader(myNetst,System.Text.Encoding.Default);</p><p> mySwrite = new StreamWriter(myNetst,Sys
63、tem.Text.Encoding.Default);//</p><p> myThread = new Thread(new ThreadStart(Reading));</p><p> myThread.Start();</p><p> MessageBox.Show("服務(wù)器開啟成功");</p><p>
64、; 由于返回的是TcpClient實(shí)例,所以可以通過對(duì)NetworkStream的讀寫來(lái)實(shí)現(xiàn)與客戶的通信。在這里引入了多線程技術(shù),為每個(gè)客戶的連接建立一個(gè)線程,在該線程中實(shí)現(xiàn)與客戶的數(shù)據(jù)通信,代碼如下:</p><p> ThreadStart ts = new ThreadStart(AcceptConnect);//客戶連接</p><p> Thread myThread =
65、new Thread(ts);//創(chuàng)建線程</p><p> myThread.Start();//啟動(dòng)線程</p><p> 與客戶程序通信完成之后,最后一步是停止監(jiān)聽套接字,調(diào)用TcpListener的Stop方法來(lái)實(shí)現(xiàn)</p><p> private void server_FormClosed(object sender,FormClosingEve
66、ntArgs e) {</p><p> CloseSever();</p><p><b> }</b></p><p> 第四章 聊天程序的功能分析</p><p> 4.1 程序的使用流程</p><p><b> 初始界面如下所示:</b>&l
67、t;/p><p> 圖4-1 客戶端1端初始界面圖</p><p> 圖4-2 客戶端2初始界面圖</p><p> 客戶端1首先“開始監(jiān)聽”,客戶端打開“連接”按鈕,客戶端1監(jiān)聽到客戶端2的鏈接請(qǐng)求后,會(huì)顯示下面的的結(jié)果:</p><p> 圖4-3 服務(wù)器端成功監(jiān)聽到客戶端的連接請(qǐng)求情況圖</p><p>
68、客戶端2和客戶端1進(jìn)行連接后,可以進(jìn)行正常的聊天了。客戶端2與客戶端1端通話情況如下圖所示:</p><p> 圖4-4 實(shí)現(xiàn)通信后的客戶端2端界面圖</p><p> 圖4-5 實(shí)現(xiàn)通信后的客戶端1端界面圖</p><p> 關(guān)于軟件的介紹初始化界面</p><p> 圖4-6 軟件的介紹初始化界面圖</p><
69、p> 4.2 程序的相關(guān)介紹</p><p><b> 軟件的使用幫助</b></p><p> 圖4-7 軟件的使用幫助界面圖</p><p><b> 軟件的版權(quán)說(shuō)明</b></p><p> 圖4-8 軟件的版權(quán)說(shuō)明界面圖</p><p><b&g
70、t; 4.3 結(jié)果分析</b></p><p> 根據(jù)以上程序的執(zhí)行情況可知,服務(wù)器端和客戶端實(shí)現(xiàn)成功的連接。根據(jù)客戶端和服務(wù)器端的通信狀況可知,所設(shè)計(jì)的聊天程序符合要求,達(dá)到了預(yù)期的目標(biāo)。</p><p> 第五章 實(shí)驗(yàn)心得體會(huì)</p><p> 通過近一個(gè)星期的課程設(shè)計(jì),我受益匪淺。本次課程設(shè)計(jì)是利用C#編寫的。首先,我復(fù)習(xí)了之前學(xué)的C#網(wǎng)絡(luò)
71、編程知識(shí),弄懂了C#編程的方法和規(guī)則。其次,更加全面的了解并掌握TCP網(wǎng)絡(luò)層協(xié)議的概念和工作原理。本次課程設(shè)計(jì)實(shí)現(xiàn)了TCP的C/S聊天程序。從一點(diǎn)點(diǎn)思想到流程圖再到整個(gè)程序的編寫,調(diào)試,無(wú)一不花費(fèi)了我許多的精力??粗约旱膭趧?dòng)果實(shí),反倒十分的欣慰,更認(rèn)識(shí)到自己的不足。今后的學(xué)習(xí)過程中要不斷的積累經(jīng)驗(yàn),開闊思維以得到提高。</p><p> 總之,課程設(shè)計(jì)的過程就是一個(gè)汲取知識(shí)的過程,從中受益匪淺,通過這次課程設(shè)
72、計(jì)使我懂得了理論與實(shí)踐相結(jié)合的重要性,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐結(jié)合起來(lái),從實(shí)踐中得出結(jié)論,才能真正的提高。同時(shí),也使我認(rèn)識(shí)到自己動(dòng)手能力太差,為我以后的學(xué)習(xí)和發(fā)展敲了一個(gè)警鐘!本次課程設(shè)計(jì)的過程中,雖然遇到了不少問題,但最后還是成功的完成了,這得益于老師的指導(dǎo)和同學(xué)們的幫助,同時(shí),也使我充分體驗(yàn)到了團(tuán)結(jié)的重要性。還有,勤動(dòng)手的重要性,在以前我總是有“只學(xué)不練”的傾向,導(dǎo)致動(dòng)手能力得不到提高,在這次的一次次編寫
73、代碼、調(diào)試代碼的過程中,我才明白“代碼不是寫出來(lái)的,是調(diào)出來(lái)的”的道理。對(duì)待任何事情都要有耐心和恒心,遇到問題要冷靜地思考,積極找出癥結(jié)所在,逐個(gè)解決。</p><p> 最后,在這里我要感謝學(xué)校為我們提供這次鍛煉的機(jī)會(huì),同時(shí)也感謝各位老師對(duì)我的指導(dǎo)和同學(xué)們的幫助,希望以后能多有這樣的鍛煉機(jī)會(huì)。在課程設(shè)計(jì)過程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌
74、握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會(huì)把課程設(shè)計(jì)的精神帶到生活中,不畏艱難,勇往直前!</p><p> 課程設(shè)計(jì)結(jié)束了,從中我們也學(xué)到了不少知識(shí)。當(dāng)然也培養(yǎng)了我們一種學(xué)習(xí)的心態(tài),堅(jiān)持堅(jiān)持再堅(jiān)持,嚴(yán)謹(jǐn)嚴(yán)謹(jǐn)再嚴(yán)謹(jǐn)。雖然計(jì)算機(jī)網(wǎng)絡(luò)的課程設(shè)計(jì)與學(xué)習(xí)已經(jīng)結(jié)束,可我們學(xué)習(xí)之路并沒有結(jié)束,我們會(huì)繼續(xù)努力學(xué)習(xí)其相關(guān)的知識(shí),以適應(yīng)社會(huì)的發(fā)展與需要,這樣才能真正成為一名合格的大學(xué)生
75、。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]謝希仁,《計(jì)算機(jī)網(wǎng)絡(luò)》[M].北京:電子工業(yè)出版社,2008</p><p> [2]鄭小平,《Visual C#.NET 開發(fā)實(shí)踐》[M].北京:人民郵電出版社,2001</p><p> [3]譚獻(xiàn)海,《網(wǎng)絡(luò)編程技術(shù)及應(yīng)用》[M].北
76、京:清華大學(xué)出版社,2006</p><p><b> 附錄1</b></p><p> private void button2_Click(object sender, EventArgs e)//“開啟服務(wù)器”按鈕</p><p><b> {</b></p><p> myMainT
77、hread = new Thread(new ThreadStart(Listening));</p><p> myMainThread.Start(); </p><p><b> }</b></p><p> private void Listening()//監(jiān)聽函數(shù)實(shí)現(xiàn)</p><p&g
78、t;<b> {</b></p><p> toolStripStatusLabel1.Text = "請(qǐng)稍等......";</p><p> myTcplistener = new TcpListener(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));</p>
79、;<p> myTcplistener.Start();</p><p> myTcpserver = myTcplistener.AcceptTcpClient();</p><p> myTcplistener.Stop();</p><p> myNetst = myTcpserver.GetStream();</p>&l
80、t;p> mySread = new StreamReader(myNetst,System.Text.Encoding.Default);</p><p> mySwrite = new StreamWriter(myNetst,System.Text.Encoding.Default);//</p><p> myThread = new Thread(new Thre
81、adStart(Reading));</p><p> myThread.Start();</p><p> MessageBox.Show("服務(wù)器開啟成功!");</p><p><b> }</b></p><p> private void Reading()//讀取并顯示網(wǎng)絡(luò)數(shù)據(jù)-函
82、數(shù)實(shí)現(xiàn)</p><p><b> {</b></p><p> toolStripStatusLabel1.Text = "正在聊天中......";</p><p> while(true)</p><p><b> {</b></p><p>
83、 for (int i = 0; i < 4; i++)</p><p><b> {</b></p><p> if (i == 0)</p><p><b> {</b></p><p> string youmsg = "\r\n" + mySread.Re
84、adLine();</p><p> richTextBox1.AppendText(youmsg);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> s
85、tring youmsg = "\r\n" + mySread.ReadLine();</p><p> richTextBox1.AppendText(youmsg);</p><p> richTextBox1.Select(richTextBox1.TextLength - youmsg.Length+1, youmsg.Length);</p>
86、<p> richTextBox1.SelectionColor = Color.Red;</p><p><b> }</b></p><p> } </p><p><b> }</b></p><p><b> }</b><
87、;/p><p> private void button1_Click(object sender, EventArgs e)//“發(fā)送”按鈕</p><p><b> {</b></p><p> string mymsg = DateTime.Now.ToString() + "<" + "來(lái)自:1
88、" + ">" + "\r\n"+richTextBox2.Text+"\r\n"+"\r\n";</p><p> //MessageBox.Show(mymsg.Length.ToString());</p><p> mySwrite.WriteLine(mymsg);//將自己聊天內(nèi)
89、容寫入內(nèi)存緩沖區(qū)</p><p> mySwrite.Flush();//將緩沖區(qū)內(nèi)容發(fā)入網(wǎng)絡(luò)流并清空</p><p> richTextBox2.Clear();//清空聊天內(nèi)容編輯框</p><p> richTextBox1.AppendText(mymsg);//調(diào)用appendtext()函數(shù),</p><p> 在聊天內(nèi)容
90、顯示框顯示自己聊天內(nèi)容</p><p> richTextBox1.Select(richTextBox1.TextLength-</p><p> mymsg.Length+29,mymsg.Length);//選取自己的聊天內(nèi)容</p><p> richTextBox1.SelectionColor = Color.Blue;//對(duì)自己聊天內(nèi)</p
91、><p> 容染色顯示 </p><p><b> }</b></p><p> private void button3_Click(object sender, EventArgs e)//“關(guān)閉服務(wù)器”按鈕</p><p><b> {</b></p>
92、<p> CloseSever();</p><p> toolStripStatusLabel1.Text = "已停止聊天!";</p><p><b> }</b></p><p> private void server_FormClosed(object sender,FormClosingEve
93、ntArgs e)//窗口關(guān)閉事件 {</p><p> CloseSever();</p><p><b> }</b></p><p> private void CloseSever()//關(guān)閉聊天-服務(wù)器端善后程序?qū)崿F(xiàn)</p><p><b> {</b></p&
94、gt;<p><b> try</b></p><p><b> {</b></p><p> if(myTcplistener!=null)</p><p><b> {</b></p><p> myTcplistener.Stop();</p
95、><p><b> }</b></p><p> if(myTcpserver!=null)</p><p><b> {</b></p><p> myTcpserver.Close();</p><p> } </p>&
96、lt;p><b> }</b></p><p><b> catch {</b></p><p> //toolStripStatusLabel1.Text = "關(guān)閉服務(wù)器發(fā)生錯(cuò)誤!";</p><p><b> }</b></p><p>
97、 if(myThread!=null)</p><p><b> {</b></p><p> if(myThread.IsAlive)</p><p><b> {</b></p><p> myThread.Abort();</p><p><b>
98、 }</b></p><p><b> }</b></p><p> if (myMainThread != null)</p><p><b> {</b></p><p> if(myMainThread.IsAlive)</p><p><b&
99、gt; {</b></p><p> myMainThread.Abort();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> private
100、void button4_Click(object sender, EventArgs e)//“</p><p><b> 退出”按鈕</b></p><p><b> {</b></p><p> Close();//調(diào)用系統(tǒng)函數(shù),退出窗口</p><p><b> }<
101、;/b></p><p> private void server_Load(object sender, EventArgs e)</p><p><b> {</b></p><p> toolStripStatusLabel1.Text = "還沒開始聊天,請(qǐng)點(diǎn)擊"啟</p><p> 動(dòng)
102、服務(wù)器"按鈕進(jìn)行聊天!";</p><p> richTextBox2.Focus();</p><p><b> }</b></p><p> private void button1_Click_1(object sender, EventArgs e)</p><p><b> {<
103、;/b></p><p> richTextBox1.Clear();</p><p> string help = "打開服務(wù)器端和客戶端窗口后,首先在右邊IP地址欄里輸入服務(wù)器端的地址:1、如果在路由器內(nèi)網(wǎng)中,雙方都可以作服務(wù)端;2、如果在外網(wǎng),則要求獨(dú)立IP的一方作服務(wù)器。聊天雙方端口號(hào)要一致。";</p><p> ri
104、chTextBox1.AppendText(help);</p><p><b> }</b></p><p> private void button2_Click_1(object sender, EventArgs e)</p><p><b> {</b></p><p> rich
105、TextBox1.Clear();</p><p> string help = "本軟件僅作為課程設(shè)計(jì)和個(gè)人交流之用。版權(quán)所有,侵權(quán)必究!";</p><p> richTextBox1.AppendText(help);</p><p><b> }</b></p><p><b&g
106、t; 附錄2</b></p><p> private void button2_Click(object sender, EventArgs e)//"連接服務(wù)器"按鈕</p><p><b> {</b></p><p> toolStripStatusLabel1.Text = "請(qǐng)稍等.
107、.....";</p><p> myTcpclient = new TcpClient();</p><p> myTcpclient.Connect(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));//連接到遠(yuǎn)程服務(wù)端</p><p> myNst = myTcpclient.G
108、etStream();//獲取數(shù)據(jù)流</p><p> mySread = new StreamReader(myNst,System.Text.Encoding.Default);//創(chuàng)建流讀實(shí)例</p><p> mySwrite = new StreamWriter(myNst,System.Text.Encoding.Default);//創(chuàng)建流寫實(shí)例</p>
109、<p> myThread = new Thread(new ThreadStart(Reading));//創(chuàng)建新線程,用新創(chuàng)建的的線程啟動(dòng)Reading函數(shù)</p><p> myThread.Start();</p><p> MessageBox.Show("連接服務(wù)器成功!"); </p><p><b>
110、 }</b></p><p> private void Reading()//讀取對(duì)方傳送過來(lái)的網(wǎng)絡(luò)數(shù)據(jù)并在richTextBox1中顯示函數(shù)實(shí)現(xiàn)</p><p><b> {</b></p><p> toolStripStatusLabel1.Text = "正在聊天中......";</p
111、><p> while(true)</p><p><b> {</b></p><p> for (int i = 0; i < 4; i++)//經(jīng)測(cè)試發(fā)現(xiàn),mySread.ReadLine()在每一次聊天內(nèi)容發(fā)送之后要讀四次, </p><p> {
112、//第一次便是頭部標(biāo)志信息行,第二次讀取的是聊天內(nèi)容,</p><p> if (i == 0) //最后兩次讀取的內(nèi)容為空,依此設(shè)計(jì)此顯示和染色函數(shù)</p><p><b> {</b></p><p> string youmsg = "\r\n" + mySread.ReadLine();</p
113、><p> richTextBox1.AppendText(youmsg);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> string youmsg =
114、"\r\n" + mySread.ReadLine();</p><p> richTextBox1.AppendText(youmsg);</p><p> richTextBox1.Select(richTextBox1.TextLength </p><p> - youmsg.Length+1, youmsg.Length);<
115、;/p><p> richTextBox1.SelectionColor = Color.Red;</p><p><b> }</b></p><p> } </p><p><b> }</b></p><p><b> }</b
116、></p><p> private void button1_Click(object sender, EventArgs e)//“發(fā)送”按鈕</p><p><b> {</b></p><p> string mymsg = DateTime.Now.ToString() + "<" + "
117、;來(lái)自:</p><p> 2" + ">" + "\r\n" + richTextBox2.Text + "\r\n" + "\r\n";</p><p> //MessageBox.Show(mymsg.Length.ToString());</p><p>
118、 mySwrite.WriteLine(mymsg);//將自己聊天內(nèi)容寫入內(nèi)存緩沖區(qū)</p><p> mySwrite.Flush();//將緩沖區(qū)內(nèi)容發(fā)入網(wǎng)絡(luò)流并清空</p><p> richTextBox2.Clear();//清空聊天內(nèi)容編輯框</p><p> richTextBox1.AppendText(mymsg);//調(diào)用appendte
119、xt()函數(shù),</p><p> 在聊天內(nèi)容顯示框顯示自己聊天內(nèi)容</p><p> richTextBox1.Select(richTextBox1.TextLength - </p><p> mymsg.Length + 29, mymsg.Length);//選取自己的聊天內(nèi)容</p><p> richTextBox1.Se
120、lectionColor = Color.Blue;//對(duì)自己聊天內(nèi)容染色顯示</p><p> //richTextBox1.SelectionColor = Color.FromArgb(myColor); </p><p><b> }</b></p><p> private void button3_C
121、lick(object sender, EventArgs e)//"斷開連接"按鈕</p><p><b> {</b></p><p> DisConnect();</p><p> toolStripStatusLabel1.Text = "已停止聊天!";</p><p&
122、gt;<b> }</b></p><p> private void client_FormClosed(object sender, </p><p> FormClosingEventArgs e)//窗口關(guān)閉事件</p><p><b> {</b></p><p> DisCon
123、nect();</p><p><b> }</b></p><p> private void DisConnect()//關(guān)閉聊天-客戶端善后程序?qū)崿F(xiàn)</p><p><b> {</b></p><p><b> try</b></p><p&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的簡(jiǎn)易網(wǎng)絡(luò)聊天程序-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--基于tcp協(xié)議編程的網(wǎng)絡(luò)聊天室
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--聊天室
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--基于tcpip協(xié)議的網(wǎng)絡(luò)監(jiān)聽程序設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 用winsock實(shí)現(xiàn)聊天室的vc++程序設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 用winsock實(shí)現(xiàn)聊天室的vc++程序設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)tcp數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 《計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)》
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---網(wǎng)絡(luò)設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---tcp 協(xié)議優(yōu)化方法研究
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-掃描正在服務(wù)的tcp端口
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論