資源描述:
《基于c#實現(xiàn)的聊天軟件設計報告》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、基于c#實現(xiàn)的聊天軟件基于c#實現(xiàn)的聊天軟件設計報告基于c#實現(xiàn)的聊天軟件目錄一.作品設計概述:31.背景意義32.創(chuàng)新點3二.作品分析設計31.主要功能及分析32.層次結構及各層通信協(xié)議3三.作品主要功能使用說明及演示101.運行主界面:102.啟動服務器113.開啟客戶端124.聊天通信功能說明:135.截圖功能14四.結論15五.參考文獻15基于c#實現(xiàn)的聊天軟件一.作品設計概述:1.背景意義在網(wǎng)絡信息技術高速發(fā)展的今天,傳統(tǒng)的通信方式已然滿足不了人們的需求。利用網(wǎng)絡資源實現(xiàn)多機通信可以最大程度地滿足人們對通信的需求,而不限制于距離地點。而如今流行著很多種網(wǎng)絡聊天工具,如Q
2、Q,MSN等,都是集成的多功能聊天工具。所以,我利用這學期所學的關于C#的相關知識及網(wǎng)絡資源,利用.NET平臺實現(xiàn)了一個簡單的聊天工具。具備了和聊天相關的基本功能,而開發(fā)這個軟件的最大意義我認為在于鞏固和加深對C#相關知識的學習。2.創(chuàng)新點我認為這款聊天軟件的創(chuàng)新點在于,它除了實現(xiàn)了基本的聊天功能,如文本聊天,保存聊天記錄,導出聊天記錄,修改字體等,還實現(xiàn)了用戶自定義的截圖功能,更大程度的滿足了用戶對通信功能的需求。二.作品分析設計1.主要功能及分析(1)進行即時通信該功能主要指服務器和多個客戶端進行即時通信。該功能實現(xiàn)的主要是文本傳輸。而對于發(fā)送即時消息的過程中,用戶可以自定義
3、設置發(fā)送文本的字體大小,清空輸入框,保存聊天記錄,導出聊天記錄等功能。只要成功與服務器端連接,可以實現(xiàn)多個客戶端與服務器進行即時通信。(2)自定義截圖功能該功能主要是模仿目前流行的聊天軟件普遍具有的截圖功能。用戶可以利用該功能實現(xiàn)自定義窗口大小的截圖并保存。更大程度滿足了用戶對通信的需求,方便了用戶的操作。2.層次結構及各層通信協(xié)議層次結構可以大體分為服務器和客戶端兩大部分,下面對其進行具體說明:(1)服務器模塊基于c#實現(xiàn)的聊天軟件A.實現(xiàn)框圖:服務器(sever)啟動監(jiān)聽(TcpListener)停止服務(stop)等待/建立連接(TcpClient)收發(fā)數(shù)據(jù)(NetStre
4、am)FY主要類設計:(sever_tcp的設計)調用到的主要類及方法屬性:1.線程類:ThreadStarThread(線程同步)2.IP地址:IPAddressIPAddress.Parse()3.監(jiān)聽:TcpListenernetStream4.信息傳送(流):ReadWriteObject附上主要部分程序(利用多線程實現(xiàn)監(jiān)聽和建立通信連接部分)publicpartialclassserver_tcp:Form{privatevoidbuttonStart_Click(objectsender,EventArgse){//用于服務器要為多個用戶服務,所以需要創(chuàng)建一個線程監(jiān)聽
5、客戶端的連接要求基于c#實現(xiàn)的聊天軟件ThreadStartts=newThreadStart(AcceptConnect);ThreadmyThread=newThread(ts);myThread.Start();buttonStart.Enabled=false;buttonStop.Enabled=true;}privatevoidAcceptConnect(){//獲取本機所有IP地址IPAddresslocaladd=IPAddress.Parse("192.168.0.4");IPAddress[]ips=Dns.GetHostEntry(Dns.GetHostNa
6、me()).AddressList;foreach(IPAddresspinips){if(p.AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork){localadd=p;break;}}listener=newTcpListener(localadd,51888);listener.Start();privatevoidReadCallback(IAsyncResultar){try{ReadWriteObjectreadWriteObject=(ReadWriteObject)ar.AsyncState;i
7、ntcount=readWriteObject.netStream.EndRead(ar);textBoxReceive.Invoke(setTextBoxCallback,string.Format("來自{0}{1}",readWriteObject.client.Client.RemoteEndPoint,System.Text.Encoding.UTF8.GetString(readWriteObject.readBytes,0,count))+"/n");if(isEx