C#__Socket多線程編程實(shí)例

C#__Socket多線程編程實(shí)例

ID:47162168

大小:130.00 KB

頁(yè)數(shù):12頁(yè)

時(shí)間:2019-08-14

C#__Socket多線程編程實(shí)例_第1頁(yè)
C#__Socket多線程編程實(shí)例_第2頁(yè)
C#__Socket多線程編程實(shí)例_第3頁(yè)
C#__Socket多線程編程實(shí)例_第4頁(yè)
C#__Socket多線程編程實(shí)例_第5頁(yè)
資源描述:

《C#__Socket多線程編程實(shí)例》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、C#Socket多線程編程實(shí)例C#是微軟隨著VS.net新推出的一門語(yǔ)言。它作為一門新興的語(yǔ)言,有著C++的強(qiáng)健,又有著VB等的RAD特性。而且,微軟推出C#主要的目的是為了對(duì)抗Sun公司的Java。大家都知道Java語(yǔ)言的強(qiáng)大功能,尤其在網(wǎng)絡(luò)編程方面。于是,C#在網(wǎng)絡(luò)編程方面也自然不甘落后于人。本文就向大家介紹一下C#下實(shí)現(xiàn)套接字(Sockets)編程的一些基本知識(shí),以期能使大家對(duì)此有個(gè)大致了解。首先,我向大家介紹一下套接字的概念。套接字基本概念:  套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)

2、絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過(guò)套接字通信而引進(jìn)的一種抽象概念。套接字通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序)。各種進(jìn)程使用這個(gè)相同的域互相之間用Internet協(xié)議簇來(lái)進(jìn)行通信。  套接字可以根據(jù)通信性質(zhì)分類,這種性質(zhì)對(duì)于用戶是可見(jiàn)的。應(yīng)用程序一般僅在同一類的套接字間進(jìn)行通信。不過(guò)只要底層的通信協(xié)議允許,不同類型

3、的套接字間也照樣可以通信。套接字有兩種不同的類型:流套接字和數(shù)據(jù)報(bào)套接字。套接字工作原理:  要通過(guò)互聯(lián)網(wǎng)進(jìn)行通信,你至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶機(jī)端,我們稱之為ClientSocket,另一個(gè)運(yùn)行于服務(wù)器端,我們稱之為ServerSocket。  根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)。  所謂服務(wù)器監(jiān)聽(tīng),是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)?! ∷^客戶端請(qǐng)求,

4、是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。  所謂連接確認(rèn),是指當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求?!#中的套接字編程實(shí)例:  通過(guò)向大家

5、簡(jiǎn)單的介紹套接字的基本概念和實(shí)現(xiàn)套接字編程的基本原理,我想大家對(duì)套接字編程已有了初步的了解。不過(guò),上面介紹的僅僅是基本概念和原理,要真正運(yùn)用還是需要一定的工作的。對(duì)基本概念和原理的真正理解的最好方法莫過(guò)于自己動(dòng)手做一個(gè)實(shí)例,下面我就向大家介紹一個(gè)很好的用C#實(shí)現(xiàn)套接字編程的實(shí)例――聊天室程序?! ”境绦蚴腔贑/S(服務(wù)器/客戶端)構(gòu)架的,程序包含一個(gè)服務(wù)器端的應(yīng)用程序和一個(gè)客戶端的應(yīng)用程序。首先,在服務(wù)器上運(yùn)行服務(wù)器端的應(yīng)用程序,該程序一運(yùn)行就開(kāi)始服務(wù)器監(jiān)聽(tīng)。然后,在客戶機(jī)上就可以打開(kāi)客戶端的應(yīng)用

6、程序。程序打開(kāi)后可以與服務(wù)器端應(yīng)用程序進(jìn)行連接,即進(jìn)行客戶端請(qǐng)求。在連接確認(rèn)后,客戶端用戶可以和其他的客戶端用戶進(jìn)行聊天??蛻舳巳藬?shù)沒(méi)有限制,同時(shí)還支持“悄悄話”聊天模式,支持聊天記錄。所以這是一個(gè)學(xué)習(xí)套接字編程的相當(dāng)不錯(cuò)的例子。而且,程序中為了處理每個(gè)客戶端的信息還用到了多線程機(jī)制。在每個(gè)客戶端與服務(wù)器端連接成功后,它們之間就建立一個(gè)線程。這樣運(yùn)用了多線程之后,客戶端之間就不會(huì)相互影響,即使其中一個(gè)出了錯(cuò)誤也不會(huì)影響到另一個(gè)。  下面,我就向大家具體介紹該實(shí)例:  服務(wù)器端程序:  1.打開(kāi)VS.

7、net,新建一個(gè)C#的模板為“Windows應(yīng)用程序”的項(xiàng)目,不妨命名為“ChatServer”?! ?.布置界面。只需在界面上添加一個(gè)ListBox控件即可,該控件主要用于顯示客戶端的用戶的一些信息的。圖象如下:  3.服務(wù)器端程序的代碼編寫。對(duì)于服務(wù)器端,主要的作用是監(jiān)聽(tīng)客戶端的連接請(qǐng)求并確認(rèn)其請(qǐng)求。程序一開(kāi)始便打開(kāi)一個(gè)StartListening()線程。privatevoidStartListening(){ listener=newTcpListener(listenport); list

8、ener.Start(); while(true) {  try  {   Sockets=listener.AcceptSocket();   clientsocket=s;   clientservice=newThread(newThreadStart(ServiceClient));   clientservice.Start();  }  catch(Exceptione)  {   Console.WriteLine(e.ToString());  } }

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。