![基于TCPIP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序設(shè)計_第1頁](http://file4.renrendoc.com/view/e75440bb40360fd75a868876abb98355/e75440bb40360fd75a868876abb983551.gif)
![基于TCPIP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序設(shè)計_第2頁](http://file4.renrendoc.com/view/e75440bb40360fd75a868876abb98355/e75440bb40360fd75a868876abb983552.gif)
![基于TCPIP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序設(shè)計_第3頁](http://file4.renrendoc.com/view/e75440bb40360fd75a868876abb98355/e75440bb40360fd75a868876abb983553.gif)
![基于TCPIP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序設(shè)計_第4頁](http://file4.renrendoc.com/view/e75440bb40360fd75a868876abb98355/e75440bb40360fd75a868876abb983554.gif)
![基于TCPIP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序設(shè)計_第5頁](http://file4.renrendoc.com/view/e75440bb40360fd75a868876abb98355/e75440bb40360fd75a868876abb983555.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
華南農(nóng)業(yè)大學(xué)理學(xué)院(計算機網(wǎng)絡(luò))
課程設(shè)計實驗時間:2021學(xué)年第二學(xué)期專業(yè)年級:2021級應(yīng)數(shù)2班實驗題目:基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序?qū)W生姓名:王曉珊學(xué)號_18_自評成績_95教師評成績___學(xué)生姓名:黃如萍_學(xué)號06_自評成績_95_教師評成績___學(xué)生姓名______學(xué)號____自評成績____教師評成績___學(xué)生姓名______學(xué)號____自評成績____教師評成績___指導(dǎo)老師:黃小虎
基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信小應(yīng)用程序課程設(shè)計的題目及要求課程設(shè)計題目掌握基于TCP/IP協(xié)議實現(xiàn)網(wǎng)絡(luò)通信,理解TCP與UDP的不同特性以及實現(xiàn)方式。課程設(shè)計要求建立一個基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信小應(yīng)用程序,實驗可采用UDP或TCP,建議基于WINDOWS平臺。功能要求建立一個基于中心服務(wù)器方式即時數(shù)據(jù)通信平臺(IM)。要求如下(*為選做內(nèi)容):1.能進行用戶管理,所有用戶必須登錄到服務(wù)器,由服務(wù)器維護在線信息。2.IM(InstantMessage)功能:用戶登錄后能進行實時多方點到點短信息通信,如聊天;3.能選擇要求服務(wù)器進行轉(zhuǎn)發(fā)服務(wù);4.能保存通信記錄到數(shù)據(jù)庫(SQLServer或其他桌面型數(shù)據(jù)庫);5.能進行雙方文件傳輸,能顯示進度;6.支持斷點重傳。(檢查時需有功能隨時中斷傳送,并在下次啟動能顯示重傳狀態(tài));*7.數(shù)據(jù)包加密;8.實時語音雙向傳送功能;*9.多方通話功能;10.界面設(shè)計要求布局合理,信息清晰。對于所有功能的要求要求清晰描述所設(shè)計的應(yīng)答機制,數(shù)據(jù)包格式,所用數(shù)據(jù)結(jié)構(gòu)及其相應(yīng)算法,機密機制等;對于功能實現(xiàn)要求描繪實現(xiàn)方法,流程。開發(fā)工具、軟硬件環(huán)境簡介開發(fā)工具開發(fā)工具:MicrosoftVisualStudio2021軟硬件環(huán)境軟件環(huán)境操作系統(tǒng):WindowsXP/Windows7開發(fā)軟件:MicrosoftVisualStudio2021開發(fā)語言:C#語言平臺:Microsoft.NETFrameworkv2.0硬件環(huán)境分辨率:1000×750服務(wù)器:PentiumIII500以上或更高;內(nèi)存:128M以上;硬盤:至少40G以上;工作站:PentiumII266以上微機;內(nèi)存:64MB硬盤:至少5G以上;程序?qū)崿F(xiàn)的基本思想程序設(shè)計分析本設(shè)計實現(xiàn)的基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信小應(yīng)用程序,實際上是一個基于Socket的聊天室。聊天室主要由聊天室服務(wù)器和聊天室客戶端組成。聊天室服務(wù)器負責(zé)管理和客戶端連接并發(fā)送消息給客戶端;聊天室客戶端負責(zé)接收或者發(fā)送聊天消息,登錄聊天室服務(wù)器等。一個聊天室服務(wù)器應(yīng)該支持多個聊天室客戶端進行同時連接。聊天室服務(wù)器和聊天室客戶端之間根據(jù)聊天協(xié)議進行通信?;舅枷氤绦虻膶崿F(xiàn)主要分為兩大部分,即服務(wù)器部分和客戶端部分。程序首先設(shè)計聊天室的服務(wù)器,再設(shè)計客戶端部分,最后生成可執(zhí)行文件。服務(wù)器服務(wù)器端管理著聊天任務(wù),它維持著一張當(dāng)前在線用戶的列表,轉(zhuǎn)發(fā)用戶發(fā)送來的消息。設(shè)計思想如下:利用控件設(shè)計窗體;功能實現(xiàn);監(jiān)聽本機IP地址中的一個指定的端口;當(dāng)有客戶端向該端口發(fā)出請求時,服務(wù)器程序立刻建立一個與該客戶端的連接并啟動一個新的線程來處理該客戶端;根據(jù)客戶端發(fā)送來的各種不同的請求,執(zhí)行相應(yīng)的操作,并將結(jié)果返回給客戶端。運行調(diào)試??蛻舳丝蛻舳藨?yīng)用程序包含用戶登錄窗口和用戶聊天的主窗口,它允許用戶登錄到服務(wù)器,可以向服務(wù)器發(fā)送消息,同時可以接收從服務(wù)器返回的信息。設(shè)計登錄窗體和聊天窗體;基于課程設(shè)計的要求實現(xiàn)各窗體對應(yīng)的功能;向服務(wù)器發(fā)送連接請求;得到服務(wù)器程序的確認后,建立與服務(wù)器的連接,并獲得與服務(wù)器交互的流通道;通過網(wǎng)絡(luò)流通道與服務(wù)器端的程序進行數(shù)據(jù)通信。運行調(diào)試。系統(tǒng)功能框架圖、系統(tǒng)流程圖功能框架圖圖SEQ圖\*ARABIC1功能框架圖系統(tǒng)流程圖圖SEQ圖\*ARABIC2系統(tǒng)流程圖具體實現(xiàn)過程設(shè)計準(zhǔn)備TCP的運用客戶端只能和服務(wù)器通信,無法和另外一個客戶端直接通信。為了使兩個客戶端能相互通信,所有的客戶一律先把聊天信息發(fā)給服務(wù)器,并告訴服務(wù)器改信息是發(fā)送給哪個客戶的,服務(wù)器收到信息后,再將該信息轉(zhuǎn)發(fā)給另外一個客戶。本設(shè)計的實現(xiàn)主要用了TcpListener類用于用于偵聽和接受傳入的連接請求?;痉椒ǎ罕鞸EQ表\*ARABIC1TCP連接基本方法TcpListener類基本方法作用Start啟動監(jiān)聽Stop關(guān)閉TcpListener并停止監(jiān)聽請求AcceptSocket在同步阻塞方式下獲取并返回一個用來接收和發(fā)送數(shù)據(jù)的Socket對象,同時從傳入的連接隊列中移除該客戶端的連接請求Socket套接字的運用本設(shè)計中自定義了通信程序的可識別命令(見以下第三小點),即自定義的簡單協(xié)議。故程序中為支持自定義的協(xié)議,采用套接字來實現(xiàn)。根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為服務(wù)器監(jiān)聽,客戶端請求,連接確認三個步驟。服務(wù)器監(jiān)聽:服務(wù)器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏埱螅河煽蛻舳说奶捉幼痔岢鲞B接請求,要連接的目標(biāo)是服務(wù)器的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器套接字的地址和端口號,然后再向服務(wù)器套接字提出連接請求。連接確認:當(dāng)服務(wù)器套接字監(jiān)聽到客戶端套接字的連接請求時,它就響應(yīng)客戶端套接字的請求,把服務(wù)器套接字的信息發(fā)給客戶端,一旦客戶端確認了此信息,連接即可建立。而服務(wù)器套接字繼續(xù)監(jiān)聽其他客戶端套接字的連接請求。服務(wù)器和客戶端必須分別進行編程,它們之間的連接如下圖所示。圖SEQ圖\*ARABIC3服務(wù)器與客戶端的連接圖通信程序中可識別命令的定義程序中定義的可識別命令格式為兩個一位整數(shù)拼接成的字符串,每位的含義如下:第一位第一位為0:客戶機向服務(wù)器發(fā)送的命令第一位為1:服務(wù)器向客戶機發(fā)送的命令"01"-離線"02"-請求在線列表可以識別的命令格式"03"-請求對所有人閃屏振動第二位服務(wù)端"04"-請求對指定用戶閃屏振動"05"-請求廣播消息第二位"06"-請求對指定用戶發(fā)送文件要求轉(zhuǎn)發(fā)給指定用戶的用戶名:轉(zhuǎn)發(fā)給指定用戶"11"-服務(wù)器要求客戶機更新在線列表客戶端"12"-服務(wù)器要求客戶機做閃屏振動default-接受用戶消息或者系統(tǒng)消息的正文服務(wù)器具體設(shè)計窗體設(shè)計新建一個Windows窗體,命名為Form1.cs,主要用于連接服務(wù)器。只有建立了聊天室服務(wù)器,客戶才能連接到上面,從而進行聊天。服務(wù)器建立之后,一般處于監(jiān)聽狀態(tài),等待客戶機的連接申請。窗體用到的主要控件如下表所示。表SEQ表\*ARABIC2主要控件控件類型控件名字用途按鈕兩個按鈕,分別用于連接服務(wù)器和退出連接標(biāo)簽兩個標(biāo)簽,一個為“端口號”,另一個為顯示“默認端口號”文本框兩個文本框,一個用于用戶輸入端口號,另一個用于顯示服務(wù)器連接等系統(tǒng)消息圖SEQ圖\*ARABIC4窗體設(shè)計圖編碼創(chuàng)建服務(wù)器這部分程序的編寫主要是實現(xiàn)“獲得有效的端口號和IP地址”,設(shè)計要點:自動獲取IP地址IPAddress_ip=newSystem.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);可以自主選擇是否輸入端口號端口號是進程的標(biāo)識,端口號范圍從0到65535。由于1000以內(nèi)的端口大多被標(biāo)準(zhǔn)協(xié)議占用,所以程序中可以自由使用的端口號一般都用大于1000的值。若輸入端口號,程序設(shè)置了有效端口號的范圍為1023與65535之間。若端口有效則連接服務(wù)器,并提示相應(yīng)的信息;默認端口號設(shè)置為8888若沒有輸入端口號,或者端口號無效,則程序自動使用默認端口號連接服務(wù)器。代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){this.button1.Enabled=false;stringportParam;portParam=textBox_port.Text;if(portParam!=string.Empty){if(!int.TryParse(portParam,out_port)||_port<1023||_port>65535){_port=8888;textBox1.AppendText("端口號不合法,默認端口號被接受!");}}textBox1.AppendText("服務(wù)器已啟動,正在監(jiān)聽...\n");textBox1.AppendText(string.Format("服務(wù)器IP:{0}\t端口號:{1}\n",_ip,_port));_tcpl=newTcpListener(_ip,_port);_tcpl.Start();trd=newThread(newThreadStart(this.ThreadTask));trd.Start();}線程監(jiān)聽和執(zhí)行由服務(wù)器和客戶端的聊天室模型可以看出,服務(wù)器跟客戶端的連接以及客戶端之間的連接都是通過執(zhí)行流實現(xiàn)的,即每一個獨立的執(zhí)行流都是一個線程。編寫線程監(jiān)聽和線程執(zhí)行體監(jiān)聽來自多個客戶端的請求。線程監(jiān)聽在創(chuàng)建服務(wù)器代碼中,可以看到若輸入端口號有效,則執(zhí)行TcpListener類偵聽和接受傳入的連接請求,并開啟線程調(diào)用ThreadTask方法。ThreadTask方法要點:Socket套接字接受連接方法;驗證用戶名是否唯一,若當(dāng)前哈希表沒有該用戶允許連接,否則連接失??;調(diào)用線程執(zhí)行體;向所有用戶發(fā)送系統(tǒng)消息,AppendText方法在文本框中追加入系統(tǒng)消息,并用foreach循環(huán)將系統(tǒng)消息傳給各個客戶端。線程執(zhí)行體線程執(zhí)行體主要用于客戶端和服務(wù)器轉(zhuǎn)發(fā)消息。線程執(zhí)行體實際上也是聊天室中服務(wù)器端的聊天依據(jù),即我們自定義的協(xié)議解析。這部分的程序流程如下圖。圖SEQ圖\*ARABIC5客戶端程序流程圖退出連接編程要點:(1)TCP停止監(jiān)聽;(2)清除在線列表。代碼如下:privatevoidbutton2_Click(objectsender,EventArgse){if(_tcpl!=null){_tcpl.Stop();}//關(guān)閉客戶端連接并清理資源if(_transmit_tb.Count!=0){foreach(Socketsessionin_transmit_tb.Values){session.Shutdown(SocketShutdown.Both);}_transmit_tb.Clear();_transmit_tb=null;}Close();}客戶端具體設(shè)計登錄窗體窗體設(shè)計圖新建一個Windows窗體,命名為login_frm.cs,主要用于驗證登錄信息,保證登錄的用戶不重復(fù),端口號和IP地址有效。主要控件如下表所示:表SEQ表\*ARABIC3用戶端登錄界面的窗體設(shè)計控件類型控件名字用途框架為一組控件添加一個有標(biāo)題的框架“請登錄”標(biāo)簽三個標(biāo)簽,分別為“用戶名”、“服務(wù)器IP”、“端口號”,提示相應(yīng)TextBox的信息文本框三個文本框,一個用于輸入用戶名,另外兩個用于顯示服務(wù)器IP和端口號,也可根據(jù)實際情況輸入合法的服務(wù)器IP和端口號按鈕兩個按鈕,分別為“登錄”和“取消”,前者為登錄聊天室,點擊后者將會關(guān)閉登錄界面圖SEQ圖\*ARABIC6用戶登陸界面程序要點TCP連接新建一個TCP連接類TCPConnection,初始化IP地址、端口號和TcpClient新實例,使用指定的IP地址和端口號連接到TCP主機。驗證登錄信息用戶輸入用戶名、服務(wù)器IP地址和端口號,若是輸入的IP地址無效,則提示“IP地址不合法”;如果輸入的端口號無法轉(zhuǎn)化為等效的32位有符號整數(shù),或不在1024-65535之間,則提示“端口號不合法”。否則則進行服務(wù)器連接。向服務(wù)器發(fā)出連接請求并向服務(wù)器發(fā)送用戶名以確認身份如果客戶端連接不到服務(wù)器,則提示“無法連接到服務(wù)器,請重試”,不然向服務(wù)器發(fā)送用戶名以確認身份,將輸入的用戶名轉(zhuǎn)化為UTF-16格式的編碼,寫入NetworkStream,再進行讀取,若是已經(jīng)存在,則提示"您的用戶名已經(jīng)被使用,請嘗試其他用戶名!",如果不存在,則獲取當(dāng)前登錄窗體的文本,并進入聊天界面。聊天窗體窗體設(shè)計新建一個Windows窗體,作為一個聊天的界面。選擇聊天室則進行廣播,選擇悄悄話則進行一對一聊天,點對點地發(fā)送文件。還可修改皮膚顏色,對發(fā)送數(shù)據(jù)進行加密、解密。窗體用到的主要控件如表所示。表SEQ表\*ARABIC4客戶端主界面的聊天窗口設(shè)計控件類型控件名字用途圖片框兩個圖片框,用于顯示圖像標(biāo)簽八個標(biāo)簽,其中兩個分別提示當(dāng)前用戶和服務(wù)器IP、端口號,另外六個提示相應(yīng)的文本框內(nèi)容或操作有格式文本控件一個有格式文本控件,提供高級文本輸入和編輯功能,顯示通信內(nèi)容文本框五個文本框,一個用于輸入待發(fā)送的內(nèi)容,兩個分別顯示加密或解密后的內(nèi)容,其它兩個分別顯示待發(fā)送和已接收的文件所在路徑文本框一個文本框,下拉式顯示當(dāng)前在線的所有用戶名,可用于選擇接收方單選框兩組單選框,一組用于選擇皮膚顏色,含三個;一組用于選擇聊天室還是悄悄話進度條兩個進度條,顯示文件傳輸和保存進度按鈕十個按鈕,分別用于顯示皮膚顏色,保存、消除聊天記錄,選擇、發(fā)送、保存文件,加密、解密發(fā)送信息,關(guān)閉界面線程執(zhí)行體這部分是與服務(wù)器相對應(yīng)的。當(dāng)客戶端連接到服務(wù)器后,服務(wù)器立刻建立一個數(shù)據(jù)接收的獨立線程。在接收線程中,對命令進行解析處理。程序流程如下圖。圖SEQ圖\*ARABIC7客戶端程序框圖功能模塊聊天功能一對多聊天在聊天室模式下進行聊天信息發(fā)送,則將相關(guān)信息寫入網(wǎng)絡(luò)流,并向服務(wù)器發(fā)送廣播請求。本地信息接收框會顯示聊天狀態(tài)、發(fā)送時間和信息內(nèi)容,其它所有在線用戶會顯示發(fā)送方用戶名、發(fā)送時間和信息內(nèi)容。相關(guān)代碼://如果是聊天室模式則向服務(wù)器發(fā)送廣播請求if(broadcast_rb.Checked){localTxt=string.Format("[廣播]您在{0}對所有人說:\r\n{1}\r\n\r\n",DateTime.Now,msg);sendTxt=string.Format("[廣播]{0}在{1}對所有人說:\r\n{2}\r\n\r\n",_username,DateTime.Now,msg);//發(fā)送廣播請求_nws.Write(newbyte[]{0,5},0,2);//_nws是用于發(fā)送和接收信息的網(wǎng)絡(luò)流}一對一私聊選擇進行“悄悄話”,則需要在當(dāng)前在線用戶在選擇一方進行聊天,沒有選擇用戶則無法進行通信,會有提示“請選擇一個接收者!\n如果沒有接受者可選,表明當(dāng)前只有您一個人在線”。發(fā)送方會接收到消息,提示發(fā)送時間、接收者的用戶名和發(fā)送的內(nèi)容,接收方會接收到發(fā)送方的用戶名、發(fā)送時間和發(fā)送的內(nèi)容。聊天記錄保存聊天記錄點擊保存聊天記錄,會創(chuàng)建一個SaveFileDialog新實例,另存文件類型設(shè)定為*.txt,輸入保存的文件名,就會將當(dāng)前接收信息文本框的所有內(nèi)容以文本文件保存。privatevoidsave_btn_Click(objectsender,EventArgse){DialogResultret;SaveFileDialogsfd=newSaveFileDialog();sfd.Filter="文本文件(*.txt)|*.txt";sfd.AddExtension=true;if((ret=sfd.ShowDialog())==DialogResult.OK){chatrcd_rtb.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText);}}清除聊天記錄點擊清除聊天記錄的按鈕后,出現(xiàn)提示信息“確實消除嗎?消除后不可恢復(fù)?!边x擇確定則調(diào)用clear()方法將當(dāng)前的接收信息框的內(nèi)容全部清空。圖SEQ圖\*ARABIC8清除聊天記錄提示窗口文件傳輸選擇文件點擊“選擇文件”,進入打開文件對話框,根據(jù)文件類型篩選文件,找到要發(fā)送的文件,點擊確定后,讀取所選文件所在路徑名。發(fā)送文件這一功能只能在“悄悄話”中實現(xiàn),在“聊天室”模式下會提示“不能在聊天室發(fā)送文件”,還需要選擇一個接收方,否則會提示“請選擇一個接收者!\n如果沒有接受者可選,表明當(dāng)前只有您一個人在線”。如果文件路徑名為空,則提示“請選擇文件傳輸路徑”,否則,根據(jù)路徑名為指定的路徑名初始化StreamReader的一個新實例sr,讀取文件內(nèi)容,關(guān)閉sr,并釋放與讀取器相關(guān)的所有系統(tǒng)資源,并啟動控制發(fā)送進度條的定時器。保存文件點擊接收文件,彈出保存文件對話框,選擇文件保存路徑;為指定路徑的指定文件初始化StreamWriter新實例,使用TextWriter.WriteLine(Stringvalue)方法將后跟行結(jié)束符的字符串寫入文本流,同時啟動控制進度條的定時器。數(shù)據(jù)加密這部分采用RSA算法來實現(xiàn)。先初始化RSA對象,再使用RSA算法進行解密和加密。下表是RSA算法應(yīng)用方法的說明。表SEQ表\*ARABIC5算法應(yīng)用方法的說明名稱說明Encrypt方法使用RSA算法對數(shù)據(jù)進行加密。該方法有兩個參數(shù),第一個參數(shù)是被加密的字節(jié)數(shù)組,第二個參數(shù)是填充方式(true表示使用OAEP方式填充,false表示使用PKCS#1.5版填充),如果操作系統(tǒng)是WindowsXP及其以上版本,可以使用true,如果是Windows2021及其以上版本,使用falseDescrypt方法使用RSA算法對數(shù)據(jù)進行加密。其它內(nèi)容與上相同。具體代碼實現(xiàn)如下:///<summary>///使用RSA算法進行解密///</summary>///<paramname="text">要加密的字符串</param>///<returns></returns>privatestringRSAEncrypt(stringtext){RSACryptoServiceProviderrsa=GetRSAProviderFromContainer("rsa1");byte[]bytes=Encoding.Unicode.GetBytes(text);byte[]encryptedData=rsa.Encrypt(bytes,true);returnConvert.ToBase64String(encryptedData);}///<summary>///使用RSA算法進行解密///</summary>///<paramname="text">要解密的字符串</param>///<returns></returns>privatestringRSADescrpt(stringtext){RSACryptoServiceProviderrsa=GetRSAProviderFromContainer("rsa1");byte[]encryptedData=Convert.FromBase64String(text);byte[]decryptedData=rsa.Decrypt(encryptedData,true);returnEncoding.Unicode.GetString(decryptedData);}///<summary>///獲取初始化RSA對象///</summary>///<paramname="containerName">密鑰容器名</param>///<returns>RSA對象</returns>privatestaticRSACryptoServiceProviderGetRSAProviderFromContainer(stringcontainerName){CspParameterscp=newCspParameters();//將ProviderType初始化為值24,該值指定PROV_RSA_AES提供程序cp.ProviderType=24;//如果不存在名為containerName的密鑰容器,則創(chuàng)建之,并初始化cp//如果存在,則直接根據(jù)它保存的內(nèi)容初始化cpcp.KeyContainerName=containerName;RSACryptoServiceProviderrsa=newRSACryptoServiceProvider(cp);returnrsa;}運行結(jié)果及分析服務(wù)器創(chuàng)建連接后,服務(wù)器一直處于監(jiān)聽狀態(tài),同時用AppendText方法不斷追加文本,顯示系統(tǒng)消息在文本框中。示意圖如下。圖SEQ圖\*ARABIC9服務(wù)器界面客戶端登錄窗體登錄窗體的設(shè)計只涉及驗證用戶名是否唯一、端口號是否有效、服務(wù)器IP是否合法。并沒有提供新用戶的注冊,這是本設(shè)計的不足之一。如果端口號不正確,用戶名不唯一,程序都提供相應(yīng)的提示。圖SEQ圖\*ARABIC10服務(wù)器登陸錯誤提示聊天窗體聊天主窗體圖SEQ圖\*ARABIC11聊天主窗體保存聊天記錄點擊聊天窗體的“保存聊天記錄”按鈕,彈出對話框如下圖,命名文件名字,按“保存”就可得到存儲聊天記錄的txt文本。圖SEQ圖\*ARABIC12保存聊天記錄窗口txt內(nèi)容顯示圖:圖SEQ圖\*ARABIC13消息記錄 文件傳輸文件傳輸進度效果圖:圖SEQ圖\*ARABIC14文件傳輸進度效果圖數(shù)據(jù)加密圖SEQ圖\*ARABIC15數(shù)據(jù)加密效果圖接收方內(nèi)容顯示圖:圖SEQ圖\*ARABIC16接收方內(nèi)容顯示圖總結(jié)王曉珊總結(jié)這次課程設(shè)計雖然總體感覺很難,但在這個過程中學(xué)到了很多新的知識。本次課程設(shè)計建立一個基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信小應(yīng)用程序,它的功能類似于我們生活中經(jīng)常使用的QQ,我想每個做了這個課程設(shè)計的同學(xué),至少都學(xué)到了一點,那就是知道我們所用的QQ軟件是用什么怎么開發(fā)出來的。以下是我做課程設(shè)計的幾點總結(jié)。程序設(shè)計知識方面,這次的設(shè)計涉及了TCP,Socket套接字,線程,網(wǎng)絡(luò)流等網(wǎng)絡(luò)應(yīng)用編程知識。可以說對于這些知識我都很陌生。開始設(shè)計時,通過書籍查閱,并利用視頻學(xué)習(xí)才弄清了整個設(shè)計的思路。這才使整個設(shè)計找到了起點。通信應(yīng)用程序兩個客戶之間的通信必須通過客戶端來實現(xiàn),因此分別設(shè)計服務(wù)器和客戶端是必要的。對于服務(wù)端,啟動服務(wù)器后TcpListener監(jiān)聽端口,當(dāng)有客戶端連接后,通過AcceptSocket返回與客戶端連接的Socket對象,然后通過讀寫Socket對象完成與聊天室客戶端的數(shù)據(jù)傳輸。而客戶端啟動后,則創(chuàng)建Socket對象并通過對象連接服務(wù)器,成功后通過socket完成數(shù)據(jù)的接收和發(fā)送。此外,服務(wù)器和客戶端的每個連接都是線程的使用。程序設(shè)計遇到的問題方面,一方面是線程Thread類的使用,經(jīng)常出現(xiàn)各種錯誤。比如,運行客戶端程序后,用可執(zhí)行文件打開另外一個窗口進行通信,程序就會出現(xiàn)如下圖的錯誤,并顯示“線程間操作無效”,但是如果兩個窗口同時是用可執(zhí)行文件打開,則不會出現(xiàn)這樣的錯誤。另一方面是數(shù)據(jù)加密與解密的設(shè)計,主要使用了RSA算法。所遇到的問題是解密的設(shè)計一直沒法運行成功。出現(xiàn)錯誤的現(xiàn)象是運行的兩個聊天窗體同時消失。最后我們并沒有將解密算法成功的應(yīng)用,而采用了簡單的同時發(fā)送加密碼和文本消息,并在接收方顯示。程序改進方面,一是我們的登錄部分沒有設(shè)置新用戶的注冊,只要用戶名唯一,端口與IP正確即可成功登錄。這會給用戶登錄造成混亂。另一方面,設(shè)計的解密功能沒有真正實現(xiàn)。最后,語音功能與斷點傳送功能都是程序可以擴充改進的地方。綜合本次設(shè)計,我們小組嚴(yán)格按照設(shè)計的要求,分析應(yīng)用程序開發(fā)的要點,通過資料與視頻學(xué)習(xí),從窗體設(shè)計到功能實現(xiàn),最后設(shè)計實現(xiàn)了網(wǎng)絡(luò)通信等功能。黃如萍總結(jié)這次計算機網(wǎng)絡(luò)課程設(shè)計,加深了我網(wǎng)路協(xié)議和套接字編程的了解,雖然有限,但是通過實驗學(xué)習(xí)基本上能夠把協(xié)議設(shè)計思想應(yīng)用到現(xiàn)實應(yīng)用中,實現(xiàn)一些通信功能。這次課程設(shè)計我們是采用C#語言來編程的,雖然曾經(jīng)使用過,對一些控件的使用和某些方法有一定的了解,但是由于不熟悉網(wǎng)絡(luò)應(yīng)用編程,設(shè)計過程中還是遇到不少的困難,編程過程中對一些錯誤總是找不出原因,或者需要花費更多的時間來修改。剛開始時對使用的一些方法的應(yīng)用上也有些問題,不熟悉的情況下很可能想用其它的方法來實現(xiàn),導(dǎo)致功能上欠缺或者產(chǎn)生一些沖突。這是第一次編寫基于服務(wù)端和客戶端的網(wǎng)絡(luò)程序,剛開始時總是挺疑惑:怎樣才能實現(xiàn)邏輯連接?覺得自己很難辦到。但事實是,事在人為。沒有嘗試永遠都不知道事情的可能性到底有多大,實踐總是檢驗問題最直接有效的方法。這次課程設(shè)計加深我對網(wǎng)絡(luò)協(xié)議的理解的同時,也擴展了知識面。因而在今后的學(xué)習(xí)工作中,我還會多動手練習(xí),更好的加深理解和鞏固知識結(jié)構(gòu)。由于能力有限,所以有些功能還是沒能實現(xiàn),例如語音通話和斷點重傳,很想加入,但老是失敗,雖然有些遺憾,但是我們在程序中加入其它功能,包括閃屏振動和界面皮膚選擇,使得界面更加生動和靈活,也算是種“補償”吧。本來是嘗試建一個數(shù)據(jù)庫來實現(xiàn)用戶管理和信息存放的,但是編程過程中總是得顧慮到數(shù)據(jù)庫應(yīng)該如何實現(xiàn),因為時間的關(guān)系也只能擱淺。這次課程設(shè)計還有一個很大的缺點:對異常情況的考慮不足,對異常的處理不夠。導(dǎo)致連接上一出問題就意外終止或者沒法再操作,得重新啟動。參考文獻[1]謝希仁.計算機網(wǎng)絡(luò)(第五版).北京:電子工業(yè)出版社.2021.5.[2]馬俊.C#網(wǎng)絡(luò)應(yīng)用編程(第二版).北京:人民郵電出版社.2021.1[3]譚桂華,魏亮.VisualC#高級編程范例.北京:清華大學(xué)出版社.2021.4[4]吳晨,陳建孝.C#網(wǎng)絡(luò)與通信程序設(shè)計案例精講.北京:清華大學(xué)出版社.2021.10[5]劉瑞新.C#網(wǎng)絡(luò)編程及應(yīng)用.北京:機械工業(yè)出版社.2021.6課程設(shè)計評分表教師評閱:設(shè)計設(shè)計設(shè)計設(shè)計設(shè)計評閱教師簽名:
論大學(xué)生寫作能力寫作能力是對自己所積累的信息進行選擇、提取、加工、改造并將之形成為書面文字的能力。積累是寫作的基礎(chǔ),積累越厚實,寫作就越有基礎(chǔ),文章就能根深葉茂開奇葩。沒有積累,胸?zé)o點墨,怎么也不會寫出作文來的。寫作能力是每個大學(xué)生必須具備的能力。從目前高校整體情況上看,大學(xué)生的寫作能力較為欠缺。一、大學(xué)生應(yīng)用文寫作能力的定義那么,大學(xué)生的寫作能力究竟是指什么呢?葉圣陶先生曾經(jīng)說過,“大學(xué)畢業(yè)生不一定能寫小說詩歌,但是一定要寫工作和生活中實用的文章,而且非寫得既通順又扎實不可?!睂τ诖髮W(xué)生的寫作能力應(yīng)包含什么,可能有多種理解,但從葉圣陶先生的談話中,我認為:大學(xué)生寫作能力應(yīng)包括應(yīng)用寫作能力和文學(xué)寫作能力,而前者是必須的,后者是“不一定”要具備,能具備則更好。眾所周知,對于大學(xué)生來說,是要寫畢業(yè)論文的,我認為寫作論文的能力可以包含在應(yīng)用寫作能力之中。大學(xué)生寫作能力的體現(xiàn),也往往是在撰寫畢業(yè)論文中集中體現(xiàn)出來的。本科畢業(yè)論文無論是對于學(xué)生個人還是對于院系和學(xué)校來說,都是十分重要的。如何提高本科畢業(yè)論文的質(zhì)量和水平,就成為教育行政部門和高校都很重視的一個重要課題。如何提高大學(xué)生的寫作能力的問題必須得到社會的廣泛關(guān)注,并且提出對策去實施解決。二、造成大學(xué)生應(yīng)用文寫作困境的原因:(一)大學(xué)寫作課開設(shè)結(jié)構(gòu)不合理。就目前中國多數(shù)高校的學(xué)科設(shè)置來看,除了中文專業(yè)會系統(tǒng)開設(shè)寫作的系列課程外,其他專業(yè)的學(xué)生都只開設(shè)了普及性的《大學(xué)語文》課。學(xué)生寫作能力的提高是一項艱巨復(fù)雜的任務(wù),而我們的課程設(shè)置僅把這一任務(wù)交給了大學(xué)語文教師,可大學(xué)語文教師既要在有限課時時間內(nèi)普及相關(guān)經(jīng)典名著知識,又要適度提高學(xué)生的鑒賞能力,且要教會學(xué)生寫作規(guī)律并提高寫作能力,任務(wù)之重實難完成。(二)對實用寫作的普遍性不重視?!按髮W(xué)語文”教育已經(jīng)被嚴(yán)重地“邊緣化”。目前對中國語文的態(tài)度淡漠,而是呈現(xiàn)出全民學(xué)英語的大好勢頭。中小學(xué)如此,大學(xué)更是如此。對我們的母語中國語文,在大學(xué)反而被漠視,沒有相關(guān)的課程的設(shè)置,沒有系統(tǒng)的學(xué)習(xí)實踐訓(xùn)練。這其實是國人的一種偏見。應(yīng)用寫作有它自身的規(guī)律和方法。一個人學(xué)問很大,會寫小說、詩歌、戲劇等,但如果不曉得應(yīng)用文寫作的特點和方法,他就寫不好應(yīng)用文。(三)部分大學(xué)生學(xué)習(xí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝修簡易施工方案
- 初升高銜接課數(shù)學(xué)試卷
- 巴中市數(shù)學(xué)試卷
- 2025年度網(wǎng)絡(luò)安全防護系統(tǒng)設(shè)計與集成服務(wù)合同書
- 2025年度智慧交通系統(tǒng)解決方案合同
- 2025年度國際貿(mào)易法律咨詢合同履行與國際貿(mào)易法規(guī)解讀
- 人教版地理八年級上冊《冬季南北溫差大夏季普遍高溫》聽課評課記錄
- 電力工程項目的勞務(wù)組織與協(xié)調(diào)
- 2025年度綠色家居產(chǎn)品研發(fā)銷售合同
- 2025年度應(yīng)急物流貨物運輸代理合同(含應(yīng)急物資調(diào)配)
- 光伏風(fēng)電儲能介紹
- 娛樂直播行業(yè)發(fā)展趨勢
- 國際學(xué)校幼升小面試試題
- 火電廠消防培訓(xùn)課件
- 精神障礙患者的生活技能培訓(xùn)
- 《系統(tǒng)解剖學(xué)》期末考試復(fù)習(xí)題庫大全-下(多選題匯總)
- 廈門弘愛醫(yī)院硼中子俘獲治療系統(tǒng)項目環(huán)境影響報告
- 酒店招標(biāo)文件內(nèi)容
- 員工調(diào)薪申請單模板
- 《中國高考評價體系》解讀(化學(xué)學(xué)科)
- 大學(xué)課程中的可持續(xù)發(fā)展目標(biāo)(SDGs)教育-第1篇
評論
0/150
提交評論