基于tcpip協(xié)議的網絡通信應用程序課程設計報告_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于TCP/IP協(xié)議的網絡通信小應用程序</p><p>  課程設計的題目及要求</p><p><b>  課程設計題目</b></p><p>  掌握基于TCP/IP協(xié)議實現網絡通信,理解TCP與UDP的不同特性以及實現方式。課程設計要求建立一個基于TCP/IP協(xié)議的網絡通信小應用程序,實驗可采用UDP或TCP,建

2、議基于WINDOWS平臺。</p><p><b>  功能要求</b></p><p>  建立一個基于中心服務器方式即時數據通信平臺(IM)。要求如下(*為選做內容):</p><p>  1. 能進行用戶管理,所有用戶必須登錄到服務器,由服務器維護在線信息。</p><p>  2. IM(Instant Mess

3、age)功能:用戶登錄后能進行實時多方點到點短信息通信,如聊天;</p><p>  3. 能選擇要求服務器進行轉發(fā)服務;</p><p>  4. 能保存通信記錄到數據庫(SQL Server或其他桌面型數據庫);</p><p>  5. 能進行雙方文件傳輸,能顯示進度;</p><p>  6. 支持斷點重傳。(檢查時需有功能隨時中斷傳

4、送,并在下次啟動能顯示重傳狀態(tài));</p><p>  *7. 數據包加密;</p><p>  8.實時語音雙向傳送功能;</p><p>  *9.多方通話功能;</p><p>  10.界面設計要求布局合理,信息清晰。</p><p><b>  對于所有功能的要求</b></p&g

5、t;<p>  要求清晰描述所設計的應答機制,數據包格式,所用數據結構及其相應算法,機密機制等;</p><p>  對于功能實現要求描繪實現方法,流程。</p><p>  開發(fā)工具、軟硬件環(huán)境簡介</p><p><b>  開發(fā)工具</b></p><p>  開發(fā)工具:Microsoft Visua

6、l Studio 2008</p><p><b>  軟硬件環(huán)境</b></p><p><b>  軟件環(huán)境</b></p><p>  操作系統(tǒng):Windows XP/Windows 7</p><p>  開發(fā)軟件:Microsoft Visual Studio 2008</p>

7、<p><b>  開發(fā)語言:C#語言</b></p><p>  平臺:Microsoft.NET Framework v2.0</p><p><b>  硬件環(huán)境</b></p><p>  分辨率:1000×750</p><p>  服務器: PentiumIII

8、500以上或更高;</p><p>  內存:128M以上;</p><p>  硬盤:至少40G以上; </p><p>  工作站: PentiumII 266以上微機;</p><p><b>  內存:64MB</b></p><p>  硬盤: 至少5G以上; </p>&

9、lt;p><b>  程序實現的基本思想</b></p><p><b>  程序設計分析</b></p><p>  本設計實現的基于TCP/IP協(xié)議的網絡通信小應用程序,實際上是一個基于Socket的聊天室。聊天室主要由聊天室服務器和聊天室客戶端組成。聊天室服務器負責管理和客戶端連接并發(fā)送消息給客戶端;聊天室客戶端負責接收或者發(fā)送聊天消

10、息,登錄聊天室服務器等。</p><p>  一個聊天室服務器應該支持多個聊天室客戶端進行同時連接。聊天室服務器和聊天室客戶端之間根據聊天協(xié)議進行通信。</p><p><b>  基本思想</b></p><p>  程序的實現主要分為兩大部分,即服務器部分和客戶端部分。程序首先設計聊天室的服務器,再設計客戶端部分,最后生成可執(zhí)行文件。<

11、;/p><p><b>  服務器</b></p><p>  服務器端管理著聊天任務,它維持著一張當前在線用戶的列表,轉發(fā)用戶發(fā)送來的消息。設計思想如下:</p><p><b>  利用控件設計窗體;</b></p><p><b>  功能實現;</b></p>

12、<p>  監(jiān)聽本機IP地址中的一個指定的端口;</p><p>  當有客戶端向該端口發(fā)出請求時,服務器程序立刻建立一個與該客戶端的連接并啟動一個新的線程來處理該客戶端;</p><p>  根據客戶端發(fā)送來的各種不同的請求,執(zhí)行相應的操作,并將結果返回給客戶端。</p><p><b>  運行調試。</b></p>

13、<p><b>  客戶端</b></p><p>  客戶端應用程序包含用戶登錄窗口和用戶聊天的主窗口,它允許用戶登錄到服務器,可以向服務器發(fā)送消息,同時可以接收從服務器返回的信息。</p><p>  設計登錄窗體和聊天窗體;</p><p>  基于課程設計的要求實現各窗體對應的功能;</p><p>

14、;  向服務器發(fā)送連接請求;</p><p>  得到服務器程序的確認后,建立與服務器的連接,并獲得與服務器交互的流通道;</p><p>  通過網絡流通道與服務器端的程序進行數據通信。</p><p><b>  運行調試。</b></p><p>  系統(tǒng)功能框架圖、系統(tǒng)流程圖</p><p&g

15、t;<b>  功能框架圖</b></p><p><b>  圖1 功能框架圖</b></p><p><b>  系統(tǒng)流程圖</b></p><p><b>  圖2系統(tǒng)流程圖</b></p><p><b>  具體實現過程</b&

16、gt;</p><p><b>  設計準備</b></p><p><b>  TCP的運用</b></p><p>  客戶端只能和服務器通信,無法和另外一個客戶端直接通信。為了使兩個客戶端能相互通信,所有的客戶一律先把聊天信息發(fā)給服務器,并告訴服務器改信息是發(fā)送給哪個客戶的,服務器收到信息后,再將該信息轉發(fā)給另外一個

17、客戶。本設計的實現主要用了TcpListener類用于用于偵聽和接受傳入的連接請求。</p><p><b>  基本方法:</b></p><p>  表1 TCP連接基本方法</p><p>  Socket套接字的運用</p><p>  本設計中自定義了通信程序的可識別命令(見以下第三小點),即自定義的簡單協(xié)議

18、。故程序中為支持自定義的協(xié)議,采用套接字來實現。</p><p>  根據連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為服務器監(jiān)聽,客戶端請求,連接確認三個步驟。</p><p>  服務器監(jiān)聽:服務器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網絡狀態(tài)。</p><p>  客戶端請求:由客戶端的套接字提出連接請求,要

19、連接的目標是服務器的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器套接字的地址和端口號,然后再向服務器套接字提出連接請求。</p><p>  連接確認:當服務器套接字監(jiān)聽到客戶端套接字的連接請求時,它就響應客戶端套接字的請求,把服務器套接字的信息發(fā)給客戶端,一旦客戶端確認了此信息,連接即可建立。而服務器套接字繼續(xù)監(jiān)聽其他客戶端套接字的連接請求。</p><p&g

20、t;  服務器和客戶端必須分別進行編程,它們之間的連接如下圖所示。</p><p>  圖3 服務器與客戶端的連接圖</p><p>  通信程序中可識別命令的定義</p><p>  程序中定義的可識別命令格式為兩個一位整數拼接成的字符串,每位的含義如下:</p><p>  第一位 第一位為0:客戶機向服務器發(fā)送的命令</p

21、><p>  第一位為1:服務器向客戶機發(fā)送的命令</p><p><b>  "01"-離線</b></p><p>  "02"-請求在線列表</p><p>  可以識別的命令格式 "03"-請求對所有人閃屏振動</p><p> 

22、 服務端 "04"-請求對指定用戶閃屏振動 "05"-請求廣播消息</p><p>  "06"-請求對指定用戶發(fā)送文件</p><p>  要求轉發(fā)給指定用戶的用戶名 :轉發(fā)給指定用戶</p>

23、;<p>  "11"-服務器要求客戶機更新在線列表</p><p>  客戶端 "12"-服務器要求客戶機做閃屏振動</p><p>  default-接受用戶消息或者系統(tǒng)消息的正文</p><p><b>  服務器具體設計</b></p><p><

24、;b>  窗體設計</b></p><p>  新建一個Windows窗體,命名為Form1.cs,主要用于連接服務器。只有建立了聊天室服務器,客戶才能連接到上面,從而進行聊天。服務器建立之后,一般處于監(jiān)聽狀態(tài),等待客戶機的連接申請。</p><p>  窗體用到的主要控件如下表所示。</p><p><b>  表2 主要控件<

25、/b></p><p><b>  圖4 窗體設計圖</b></p><p><b>  編碼</b></p><p><b>  創(chuàng)建服務器</b></p><p>  這部分程序的編寫主要是實現“獲得有效的端口號和IP地址”,設計要點:</p><

26、;p><b>  自動獲取IP地址</b></p><p>  IPAddress _ip = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);</p><p>  可以自主選擇是否輸入端口號</p><p>  端

27、口號是進程的標識,端口號范圍從0到65535。由于1000以內的端口大多被標準協(xié)議占用,所以程序中可以自由使用的端口號一般都用大于1000的值。</p><p>  若輸入端口號,程序設置了有效端口號的范圍為1023與65535之間。若端口有效則連接服務器,并提示相應的信息;</p><p>  默認端口號設置為8888</p><p>  若沒有輸入端口號,或者端

28、口號無效,則程序自動使用默認端口號連接服務器。</p><p><b>  代碼如下:</b></p><p>  private void button1_Click(object sender, EventArgs e)</p><p>  { this.button1.Enabled = false;</p><p&

29、gt;  string portParam;</p><p>  portParam = textBox_port.Text;</p><p>  if (portParam != string.Empty)</p><p>  { if (!int.TryParse(portParam, out _port) || _port < 1023 || _po

30、rt > 65535)</p><p><b>  {</b></p><p>  _port = 8888;</p><p>  textBox1 .AppendText ("端口號不合法,默認端口號被接受!");</p><p><b>  } }</b></p

31、><p>  textBox1 .AppendText ("服務器已啟動,正在監(jiān)聽...\n");</p><p>  textBox1 .AppendText (string.Format("服務器IP:{0}\t端口號:{1}\n", _ip, _port));</p><p>  _tcpl =new TcpListener

32、 (_ip, _port);</p><p>  _tcpl.Start();</p><p>  trd = new Thread(new ThreadStart(this.ThreadTask));</p><p>  trd.Start(); </p><p><b>  }</b></p>&l

33、t;p><b>  線程監(jiān)聽和執(zhí)行</b></p><p>  由服務器和客戶端的聊天室模型可以看出,服務器跟客戶端的連接以及客戶端之間的連接都是通過執(zhí)行流實現的,即每一個獨立的執(zhí)行流都是一個線程。編寫線程監(jiān)聽和線程執(zhí)行體監(jiān)聽來自多個客戶端的請求。</p><p><b>  線程監(jiān)聽</b></p><p>  在

34、創(chuàng)建服務器代碼中,可以看到若輸入端口號有效,則執(zhí)行TcpListener類偵聽和接受傳入的連接請求,并開啟線程調用ThreadTask方法。</p><p>  ThreadTask方法要點:</p><p>  Socket套接字接受連接方法;</p><p>  驗證用戶名是否唯一,若當前哈希表沒有該用戶允許連接,否則連接失?。?lt;/p><p

35、><b>  調用線程執(zhí)行體;</b></p><p>  向所有用戶發(fā)送系統(tǒng)消息,AppendText方法在文本框中追加入系統(tǒng)消息,并用foreach循環(huán)將系統(tǒng)消息傳給各個客戶端。</p><p><b>  線程執(zhí)行體</b></p><p>  線程執(zhí)行體主要用于客戶端和服務器轉發(fā)消息。線程執(zhí)行體實際上也是聊天

36、室中服務器端的聊天依據,即我們自定義的協(xié)議解析。這部分的程序流程如下圖。</p><p>  圖5 客戶端程序流程圖</p><p><b>  退出連接</b></p><p>  編程要點:(1)TCP停止監(jiān)聽;</p><p>  (2)清除在線列表。</p><p><b> 

37、 代碼如下:</b></p><p>  private void button2_Click(object sender, EventArgs e)</p><p>  {if (_tcpl != null)</p><p><b>  {</b></p><p>  _tcpl.Stop();}</

38、p><p>  //關閉客戶端連接并清理資源</p><p>  if (_transmit_tb.Count != 0)</p><p>  { foreach (Socket session in _transmit_tb.Values)</p><p><b>  {</b></p><p>

39、  session.Shutdown(SocketShutdown.Both);</p><p><b>  }</b></p><p>  _transmit_tb.Clear();</p><p>  _transmit_tb = null;</p><p><b>  } </b><

40、/p><p><b>  Close();}</b></p><p><b>  客戶端具體設計</b></p><p><b>  登錄窗體</b></p><p><b>  窗體設計圖</b></p><p>  新建一個Wind

41、ows窗體,命名為login_frm.cs,主要用于驗證登錄信息,保證登錄的用戶不重復,端口號和IP地址有效。</p><p>  主要控件如下表所示:</p><p>  表3 用戶端登錄界面的窗體設計</p><p>  圖6 用戶登陸界面</p><p><b>  程序要點</b></p>&l

42、t;p><b>  TCP連接</b></p><p>  新建一個TCP連接類TCPConnection,初始化IP地址、端口號和TcpClient新實例,使用指定的IP地址和端口號連接到TCP主機。</p><p><b>  驗證登錄信息</b></p><p>  用戶輸入用戶名、服務器IP地址和端口號,若是

43、輸入的IP地址無效,則提示“IP地址不合法”;如果輸入的端口號無法轉化為等效的32位有符號整數,或不在1024-65535之間,則提示“端口號不合法”。否則則進行服務器連接。</p><p>  向服務器發(fā)出連接請求并向服務器發(fā)送用戶名以確認身份</p><p>  如果客戶端連接不到服務器,則提示“無法連接到服務器,請重試”,不然向服務器發(fā)送用戶名以確認身份,將輸入的用戶名轉化為UTF-

44、16格式的編碼,寫入NetworkStream,再進行讀取,若是已經存在,則提示"您的用戶名已經被使用,請嘗試其他用戶名!",如果不存在,則獲取當前登錄窗體的文本,并進入聊天界面。</p><p><b>  聊天窗體</b></p><p><b>  窗體設計</b></p><p>  新建一個W

45、indows窗體,作為一個聊天的界面。 選擇聊天室則進行廣播,選擇悄悄話則進行一對一聊天,點對點地發(fā)送文件。還可修改皮膚顏色,對發(fā)送數據進行加密、解密。</p><p>  窗體用到的主要控件如表所示。</p><p>  表4 客戶端主界面的聊天窗口設計</p><p><b>  線程執(zhí)行體</b></p><p>

46、;  這部分是與服務器相對應的。當客戶端連接到服務器后,服務器立刻建立一個數據接收的獨立線程。在接收線程中,對命令進行解析處理。程序流程如下圖。</p><p>  圖 7 客戶端程序框圖</p><p><b>  功能模塊</b></p><p><b>  聊天功能</b></p><p>

47、<b>  一對多聊天</b></p><p>  在聊天室模式下進行聊天信息發(fā)送,則將相關信息寫入網絡流,并向服務器發(fā)送廣播請求。本地信息接收框會顯示聊天狀態(tài)、發(fā)送時間和信息內容,其它所有在線用戶會顯示發(fā)送方用戶名、發(fā)送時間和信息內容。</p><p><b>  相關代碼:</b></p><p>  //如果是聊天室

48、模式則向服務器發(fā)送廣播請求</p><p>  if (broadcast_rb.Checked)</p><p><b>  {</b></p><p>  localTxt = string.Format("[廣播]您在 {0} 對所有人說:\r\n{1}\r\n\r\n", DateTime.Now, msg);<

49、;/p><p>  sendTxt = string.Format("[廣播]{0} 在 {1} 對所有人說:\r\n{2}\r\n\r\n", _username, DateTime.Now, msg);</p><p><b>  //發(fā)送廣播請求</b></p><p>  _nws.Write(new byte[] {

50、0, 5 }, 0, 2); //_nws是用于發(fā)送和接收信息的網絡流</p><p><b>  }</b></p><p><b>  一對一私聊</b></p><p>  選擇進行“悄悄話”,則需要在當前在線用戶在選擇一方進行聊天,沒有選擇用戶則無法進行通信,會有提示“請選擇一個接收者!\n如果沒有接受者可選,表明

51、當前只有您一個人在線”。</p><p>  發(fā)送方會接收到消息,提示發(fā)送時間、接收者的用戶名和發(fā)送的內容,接收方會接收到發(fā)送方的用戶名、發(fā)送時間和發(fā)送的內容。</p><p><b>  聊天記錄</b></p><p><b>  保存聊天記錄</b></p><p>  點擊保存聊天記錄,會創(chuàng)

52、建一個SaveFileDialog新實例,另存文件類型設定為*.txt,輸入保存的文件名,就會將當前接收信息文本框的所有內容以文本文件保存。</p><p>  private void save_btn_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  Dialog

53、Result ret;</p><p>  SaveFileDialog sfd = new SaveFileDialog();</p><p>  sfd.Filter = "文本文件(*.txt)|*.txt";</p><p>  sfd.AddExtension = true;</p><p>  if ((ret

54、 = sfd.ShowDialog()) == DialogResult.OK)</p><p><b>  {</b></p><p>  chatrcd_rtb.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText);</p><p><b>  }</b><

55、;/p><p><b>  }</b></p><p><b>  清除聊天記錄</b></p><p>  點擊清除聊天記錄的按鈕后,出現提示信息“確實消除嗎?消除后不可恢復。”選擇確定則調用clear()方法將當前的接收信息框的內容全部清空。</p><p>  圖8 清除聊天記錄提示窗口<

56、/p><p><b>  文件傳輸</b></p><p><b>  選擇文件</b></p><p>  點擊“選擇文件”,進入打開文件對話框,根據文件類型篩選文件,找到要發(fā)送的文件,點擊確定后,讀取所選文件所在路徑名。</p><p><b>  發(fā)送文件</b></p

57、><p>  這一功能只能在“悄悄話”中實現,在“聊天室”模式下會提示“不能在聊天室發(fā)送文件”,還需要選擇一個接收方,否則會提示“請選擇一個接收者!\n如果沒有接受者可選,表明當前只有您一個人在線”。如果文件路徑名為空,則提示“請選擇文件傳輸路徑”,否則,根據路徑名為指定的路徑名初始化StreamReader的一個新實例sr,讀取文件內容,關閉sr,并釋放與讀取器相關的所有系統(tǒng)資源,并啟動控制發(fā)送進度條的定時器。&l

58、t;/p><p><b>  保存文件</b></p><p>  點擊接收文件,彈出保存文件對話框,選擇文件保存路徑;為指定路徑的指定文件初始化StreamWriter新實例,使用TextWriter.WriteLine(String value)方法將后跟行結束符的字符串寫入文本流,同時啟動控制進度條的定時器。</p><p><b>

59、;  數據加密</b></p><p>  這部分采用RSA算法來實現。先初始化RSA對象,再使用RSA算法進行解密和加密。下表是RSA算法應用方法的說明。</p><p>  表5 算法應用方法的說明</p><p><b>  具體代碼實現如下:</b></p><p>  /// <summar

60、y></p><p>  /// 使用RSA算法進行解密</p><p>  /// </summary></p><p>  /// <param name="text">要加密的字符串</param></p><p>  /// <returns></retu

61、rns></p><p>  private string RSAEncrypt(string text)</p><p><b>  {</b></p><p>  RSACryptoServiceProvider rsa = GetRSAProviderFromContainer("rsa1");</p>

62、;<p>  byte[] bytes = Encoding.Unicode.GetBytes(text);</p><p>  byte[] encryptedData = rsa.Encrypt(bytes, true);</p><p>  return Convert.ToBase64String(encryptedData);</p><p>

63、;<b>  }</b></p><p>  /// <summary></p><p>  /// 使用RSA算法進行解密</p><p>  /// </summary></p><p>  /// <param name="text">要解密的字符串</

64、param></p><p>  /// <returns></returns></p><p>  private string RSADescrpt(string text)</p><p><b>  {</b></p><p>  RSACryptoServiceProvider r

65、sa = GetRSAProviderFromContainer("rsa1");</p><p>  byte[] encryptedData = Convert.FromBase64String(text);</p><p>  byte[] decryptedData = rsa.Decrypt(encryptedData, true);</p>&

66、lt;p>  return Encoding.Unicode.GetString(decryptedData);</p><p><b>  }</b></p><p>  /// <summary></p><p>  /// 獲取初始化RSA對象</p><p>  /// </summary

67、></p><p>  /// <param name="containerName">密鑰容器名</param></p><p>  /// <returns>RSA對象</returns></p><p>  private static RSACryptoServiceProvider

68、GetRSAProviderFromContainer(string containerName)</p><p><b>  {</b></p><p>  CspParameters cp = new CspParameters();</p><p>  //將 ProviderType初始化為值24,該值指定PROV_RSA_AES提供程

69、序</p><p>  cp.ProviderType = 24;</p><p>  //如果不存在名為containerName的密鑰容器,則創(chuàng)建之,并初始化cp</p><p>  //如果存在,則直接根據它保存的內容初始化cp</p><p>  cp.KeyContainerName = containerName;</p&g

70、t;<p>  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);</p><p>  return rsa;</p><p><b>  }</b></p><p><b>  運行結果及分析</b></p><

71、;p><b>  服務器</b></p><p>  創(chuàng)建連接后,服務器一直處于監(jiān)聽狀態(tài),同時用AppendText方法不斷追加文本,顯示系統(tǒng)消息在文本框中。示意圖如下。</p><p><b>  圖9 服務器界面</b></p><p><b>  客戶端</b></p>&

72、lt;p><b>  登錄窗體</b></p><p>  登錄窗體的設計只涉及驗證用戶名是否唯一、端口號是否有效、服務器IP是否合法。并沒有提供新用戶的注冊,這是本設計的不足之一。如果端口號不正確,用戶名不唯一,程序都提供相應的提示。</p><p>  圖10 服務器登陸錯誤提示</p><p><b>  聊天窗體<

73、;/b></p><p><b>  聊天主窗體</b></p><p>  圖11 聊天主窗體</p><p><b>  保存聊天記錄</b></p><p>  點擊聊天窗體的“保存聊天記錄”按鈕,彈出對話框如下圖,命名文件名字,按“保存”就可得到存儲聊天記錄的txt文本。</p

74、><p>  圖12 保存聊天記錄窗口</p><p><b>  txt內容顯示圖:</b></p><p><b>  圖13 消息記錄</b></p><p><b>  文件傳輸</b></p><p>  文件傳輸進度效果圖:</p>

75、;<p>  圖14 文件傳輸進度效果圖</p><p><b>  數據加密</b></p><p>  圖15 數據加密效果圖</p><p><b>  接收方內容顯示圖:</b></p><p>  圖16 接收方內容顯示圖</p><p><

76、;b>  總結</b></p><p><b>  王曉珊總結</b></p><p>  這次課程設計雖然總體感覺很難,但在這個過程中學到了很多新的知識。本次課程設計建立一個基于TCP/IP協(xié)議的網絡通信小應用程序,它的功能類似于我們生活中經常使用的QQ,我想每個做了這個課程設計的同學,至少都學到了一點,那就是知道我們所用的QQ軟件是用什么怎么開發(fā)

77、出來的。以下是我做課程設計的幾點總結。</p><p>  程序設計知識方面,這次的設計涉及了TCP,Socket套接字,線程,網絡流等網絡應用編程知識??梢哉f對于這些知識我都很陌生。開始設計時,通過書籍查閱,并利用視頻學習才弄清了整個設計的思路。這才使整個設計找到了起點。通信應用程序兩個客戶之間的通信必須通過客戶端來實現,因此分別設計服務器和客戶端是必要的。對于服務端,啟動服務器后TcpListener監(jiān)聽端口

78、,當有客戶端連接后,通過AcceptSocket返回與客戶端連接的Socket對象,然后通過讀寫Socket對象完成與聊天室客戶端的數據傳輸。而客戶端啟動后,則創(chuàng)建Socket對象并通過對象連接服務器,成功后通過socket完成數據的接收和發(fā)送。此外,服務器和客戶端的每個連接都是線程的使用。</p><p>  程序設計遇到的問題方面,一方面是線程Thread類的使用,經常出現各種錯誤。比如,運行客戶端程序后,用

79、可執(zhí)行文件打開另外一個窗口進行通信,程序就會出現如下圖的錯誤,并顯示“線程間操作無效”,但是如果兩個窗口同時是用可執(zhí)行文件打開,則不會出現這樣的錯誤。另一方面是數據加密與解密的設計,主要使用了RSA算法。所遇到的問題是解密的設計一直沒法運行成功。出現錯誤的現象是運行的兩個聊天窗體同時消失。最后我們并沒有將解密算法成功的應用,而采用了簡單的同時發(fā)送加密碼和文本消息,并在接收方顯示。</p><p>  程序改進方面

80、,一是我們的登錄部分沒有設置新用戶的注冊,只要用戶名唯一,端口與IP正確即可成功登錄。這會給用戶登錄造成混亂。另一方面,設計的解密功能沒有真正實現。最后,語音功能與斷點傳送功能都是程序可以擴充改進的地方。</p><p>  綜合本次設計,我們小組嚴格按照設計的要求,分析應用程序開發(fā)的要點,通過資料與視頻學習,從窗體設計到功能實現,最后設計實現了網絡通信等功能。</p><p><b

81、>  黃如萍總結</b></p><p>  這次計算機網絡課程設計,加深了我網路協(xié)議和套接字編程的了解,雖然有限,但是通過實驗學習基本上能夠把協(xié)議設計思想應用到現實應用中,實現一些通信功能。</p><p>  這次課程設計我們是采用C#語言來編程的,雖然曾經使用過,對一些控件的使用和某些方法有一定的了解,但是由于不熟悉網絡應用編程,設計過程中還是遇到不少的困難,編程過

82、程中對一些錯誤總是找不出原因,或者需要花費更多的時間來修改。剛開始時對使用的一些方法的應用上也有些問題,不熟悉的情況下很可能想用其它的方法來實現,導致功能上欠缺或者產生一些沖突。</p><p>  這是第一次編寫基于服務端和客戶端的網絡程序,剛開始時總是挺疑惑:怎樣才能實現邏輯連接?覺得自己很難辦到。但事實是,事在人為。沒有嘗試永遠都不知道事情的可能性到底有多大,實踐總是檢驗問題最直接有效的方法。這次課程設計加

83、深我對網絡協(xié)議的理解的同時,也擴展了知識面。因而在今后的學習工作中,我還會多動手練習,更好的加深理解和鞏固知識結構。</p><p>  由于能力有限,所以有些功能還是沒能實現,例如語音通話和斷點重傳,很想加入,但老是失敗,雖然有些遺憾,但是我們在程序中加入其它功能,包括閃屏振動和界面皮膚選擇,使得界面更加生動和靈活,也算是種“補償”吧。本來是嘗試建一個數據庫來實現用戶管理和信息存放的,但是編程過程中總是得顧慮到

84、數據庫應該如何實現,因為時間的關系也只能擱淺。</p><p>  這次課程設計還有一個很大的缺點:對異常情況的考慮不足,對異常的處理不夠。導致連接上一出問題就意外終止或者沒法再操作,得重新啟動。</p><p><b>  參考文獻</b></p><p>  [1]謝希仁.計算機網絡(第五版).北京:電子工業(yè)出版社.2007.5.</

85、p><p>  [2]馬俊. C#網絡應用編程(第二版).北京:人民郵電出版社.2010.1</p><p>  [3]譚桂華,魏亮. Visual C#高級編程范例.北京:清華大學出版社.2004.4</p><p>  [4]吳晨,陳建孝. C# 網絡與通信程序設計案例精講. 北京:清華大學出版社.2006.10</p><p>  [5]劉

溫馨提示

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

評論

0/150

提交評論