資源描述:
《C# Socket多線程編程實例》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、C#Socket多線程編程實例C#是微軟隨著VS.net新推出的一門語言。它作為一門新興的語言,有著C++的強健,又有著VB等的RAD特性。而且,微軟推出C#主要的目的是為了對抗Sun公司的Java。大家都知道Java語言的強大功能,尤其在網(wǎng)絡(luò)編程方面。于是,C#在網(wǎng)絡(luò)編程方面也自然不甘落后于人。本文就向大家介紹一下C#下實現(xiàn)套接字(Sockets)編程的一些基本知識,以期能使大家對此有個大致了解。首先,我向大家介紹一下套接字的概念。套接字基本概念: 套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙
2、向通信的端點,它構(gòu)成了單個主機內(nèi)及整個網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。各種進程使用這個相同的域互相之間用Internet協(xié)議簇來進行通信?! √捉幼挚梢愿鶕?jù)通信性質(zhì)分類,這種性質(zhì)對于用戶是可見的。應(yīng)用程序一般僅在同一類的套接字間進行通信。不過只要底層的通信協(xié)議允許,不同類型的套接字間也照樣可以通信。套接字有兩種不同的類型:流套接字和數(shù)據(jù)報套接字。套接字工作原理: 要通過互聯(lián)網(wǎng)進行通信,你至
3、少需要一對套接字,其中一個運行于客戶機端,我們稱之為ClientSocket,另一個運行于服務(wù)器端,我們稱之為ServerSocket?! 「鶕?jù)連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認?! ∷^服務(wù)器監(jiān)聽,是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)?! ∷^客戶端請求,是指由客戶端的套接字提出連接請求,要連接的目標是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字
4、提出連接請求?! ∷^連接確認,是指當服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。 C#中的套接字編程實例: 通過向大家簡單的介紹套接字的基本概念和實現(xiàn)套接字編程的基本原理,我想大家對套接字編程已有了初步的了解。不過,上面介紹的僅僅是基本概念和原理,要真正運用還是需要一定的工作的。對基本概念和原理的真正理解的最好方法莫過于自己動手做一個實例,下面我就向大家介
5、紹一個很好的用C#實現(xiàn)套接字編程的實例――聊天室程序?! ”境绦蚴腔贑/S(服務(wù)器/客戶端)構(gòu)架的,程序包含一個服務(wù)器端的應(yīng)用程序和一個客戶端的應(yīng)用程序。首先,在服務(wù)器上運行服務(wù)器端的應(yīng)用程序,該程序一運行就開始服務(wù)器監(jiān)聽。然后,在客戶機上就可以打開客戶端的應(yīng)用程序。程序打開后可以與服務(wù)器端應(yīng)用程序進行連接,即進行客戶端請求。在連接確認后,客戶端用戶可以和其他的客戶端用戶進行聊天??蛻舳巳藬?shù)沒有限制,同時還支持“悄悄話”聊天模式,支持聊天記錄。所以這是一個學習套接字編程的相當不錯的例子。而且,程序中為了處理每個客戶端的信息還用到了多線程機制。在每個客戶端與
6、服務(wù)器端連接成功后,它們之間就建立一個線程。這樣運用了多線程之后,客戶端之間就不會相互影響,即使其中一個出了錯誤也不會影響到另一個?! ∠旅?,我就向大家具體介紹該實例: 服務(wù)器端程序: 1.打開VS.net,新建一個C#的模板為“Windows應(yīng)用程序”的項目,不妨命名為“ChatServer”?! ?.布置界面。只需在界面上添加一個ListBox控件即可,該控件主要用于顯示客戶端的用戶的一些信息的。圖象如下: 3.服務(wù)器端程序的代碼編寫。對于服務(wù)器端,主要的作用是監(jiān)聽客戶端的連接請求并確認其請求。程序一開始便打開一個StartListening()線
7、程。privatevoidStartListening(){ listener=newTcpListener(listenport); listener.Start(); while(true) { try { Sockets=listener.AcceptSocket(); clientsocket=s; clientservice=newThread(newThreadStart(ServiceClient)); clientservice.Start(); } catch(Exceptione) { Console.Wri
8、teLine(e.ToString()); } }