C Socket簡單介紹

2021-09-30 13:37:41 字數 2779 閱讀 5608

一、套接字(socket)的基本概念:

套接字是通訊的基石,是支援tcp/ip協議的網路通訊的基本操作單元。可以將套接字看作不同主機間的程序進行雙向通訊的端點,它構成了單個主機內及整個網路間的程式設計介面。套接字存在於通訊域中,通訊域是為了處理一般的執行緒通過套接字通訊而引進的一種抽象概念。套接字通常和同乙個域中的套接字交換資料,各種程序使用這個相同的域互相之間用internet協議簇來進行通訊。

二、套接字的分類:

套接字可以根據通訊性質分類,這種性質對於使用者是可見的。應用程式一般僅在同一類的套接字間進行通訊。不過只要底層的通訊協議允許,不同型別的套接字間也照樣可以通訊。套接字有兩種不同的型別:流套接字資料報套接字

三、套接字的工作原理及步驟:

要通過網際網路進行通訊,至少需要一對套接字,其中乙個執行於客戶機端,我們稱之為clientsocket,另乙個執行於伺服器端,我們稱之為serversocket。根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽客戶端請求連線確認

伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。

客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。       

連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

四、通過例項了解套接字的應用:

1、伺服器監聽:

①、建立ipendpoint例項,用於socket偵聽時繫結:

ipendpoint ipep = new ipendpoint(ipaddress.any, 6001);

②、建立套接字例項:

serversocket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

這裡建立的時候用protocoltype.tcp,表示建立乙個面向連線(tcp)的socket

③、將所建立的套接字與ipendpoint繫結:

serversocket.bind(ipep);

④、設定套接字為收聽模式:

serversocket.listen(10); 

以上這四步,我們已經建立了socket的偵聽模式,下面我們就來設定怎麼樣來獲取客戶socket連線的例項,以及連線後的資訊傳送。

⑤、在套接字上接收接入的連線:

通過serversocket.accept()來接收客戶socket的連線請求,在這裡用迴圈可以實現該執行緒實時偵聽,而不是只偵聽一次。當程式執行serversocket.accept()時,會等待,直到有客戶端socket發起連線請求時,獲取該客戶socket,如上面的clientsocket。在這裡我用多執行緒來實現與多個客戶端socket的連線和通訊,一旦接收到乙個連線後,就新建乙個執行緒,執行receivedata功能來實現資訊的傳送和接收。

⑥、在套接字上接收客戶端傳送的資訊和傳送資訊:

以上就是服務端socket偵聽模式的實現,只要有遠端客戶端socket連線上後,就可以輕鬆的傳送資訊和接收資訊了。下面我們來看看客戶端socket是怎麼連線上伺服器的。

2、客戶端請求:

① 、建立ipendpoint例項和套接字:     

這個跟服務端socket偵聽差不多,下面一步由服務端socket的偵聽模式變成連線模式。 

②、將套接字連線到遠端伺服器:

③、接收資訊:

④、傳送資訊:

客戶端的傳送資訊和接收資訊跟伺服器的接收傳送是一樣的,只不過乙個是偵聽模式而另乙個是連線模式。

以上便是學習以來我所了解的c#中有關套接字的知識

C Socket簡單案例

c socket簡單案例 socket server 1.例項化並設定socket例項物件 a.建立ip位址和埠 b.繫結監聽位址 c.設定一下允許同時訪問數2.監聽連線 a.通過啟動乙個新的執行緒執行,這樣主線程不會假死 啟動執行緒,所帶的引數必須是object型別 b.利用迴圈等待連線並返回乙個...

C Socket 程式設計簡單例項

c console 程式設計 伺服器端 csharpconsolesokecttestserver.cs using system using system.collections.generic using system.text using system.net using system.net...

簡單的C Socket程式設計

簡單的c socket程式設計 2009年06月23日 using system using system.net using system.net.sockets using system.io public class echoserver socketforclient.close conso...