socket基礎知識

2021-07-09 19:32:56 字數 1299 閱讀 1183

注意:如果你已經接觸過socket,那就沒什麼必要耽誤時間看下去了。另外,如果發現其中任何錯誤,歡迎直接指出。

1.按慣例先來介紹下socket

windows中的很多東西都是從unix領域借鑑過來的,socket也是一樣。在unix中,socket代表了一種檔案描述符(在unix中一切都是以檔案為單位),而這裡這個描述符則是用於描述網路訪問的。什麼意思呢?就是程式設計師可以通過socket來傳送和接收網路上的資料。你也可以理解成是乙個api。有了它,你就不用直接去操作網絡卡了,而是通過這個介面,這樣就省了很多複雜的操作。

在c#中,ms為我們提供了 system.net.sockets 命名空間,裡面包含了socket類。

2.有了socket,那就可以用它來訪問網路了

不過你不要高興得太早,要想訪問網路,還得有些基本的條件(和程式設計無關的我就不提了):a. 要確定本機的ip和埠,socket只有與某一ip和埠繫結,才能發揮強大的威力。b. 得有協議吧(否則誰認得你這傳送到網路的是什麼呀)。想要複雜的,我們可以自己來定協議。但是這個就不在這篇裡提了,我這裡介紹兩種大家最熟悉不過的協議:tcp & udp。(別說你不知道,不然...不然...我不告訴你)

如果具備了基本的條件,就可以開始用它們訪問網路了。來看看步驟吧:

a. 建立乙個套接字

b. 繫結本機的ip和埠

c. 如果是tcp,因為是面向連線的,所以要利用listeno()方法來監聽網路上是否有人給自己發東西;如果是udp,因為是無連線的,所以來者不拒。

d. tcp情況下,如果監聽到乙個連線,就可以使用accept來接收這個連線,然後就可以利用send/receive來執行操作了。而udp,則不需要accept, 直接使用sendto/receivefrom來執行操作。(看清楚哦,和tcp的執行方法有區別,因為udp不需要建立連線,所以在傳送前並不知道對方的ip和埠,因此需要指定乙個傳送的節點才能進行正常的傳送和接收)

e. 如果你不想繼續傳送和接收了,就不要浪費資源了。能close的就close吧。

如果看了上面文字,你還不清楚的話,就來看看圖好了:

面向連線的套接字系統呼叫時序  

無連線的套接字系統呼叫時序

3.開始動手敲~~**(簡單的**)

首先我們來寫個面向連線的

socket 基礎知識

socket是使用 標準unix 檔案描述符 file descriptor 和其它程式通訊的方式。struct sockaddr.這個結構 為許多態別的套接字儲存套接字位址資訊 struct sockaddr sa family 能夠是各種各樣的型別,但是在這篇文章中都是 af inet sa d...

socket程式設計基礎知識

為了使網路上的計算機能夠彼此識別對方,每台計算機都需要乙個ip位址以標識自己。ip位址由ip協議規定,以32位的二進位制數示。最新的ipv6協議將ip位址公升為128位,這使得ip位址更加廣泛,能夠很好地解決目前ip位址緊缺的情況,但是ipv6協議距離實際應用還有一段距離,目前多數作業系統和應用軟體...

Socket程式設計 基礎知識

一 計算機通訊的必備條件 ip 埠 區分不同的應用程式 埠範圍是0 65535,1 1023被系統保留 協議二 tcp ip 傳輸控制協議 網際網路協議 模型 應用層 http 超文字傳輸協議 瀏覽網頁,80 ftp 簡單郵件傳送協議 telnet 遠端登路服務 23 傳輸層 tcp ip協議 網路...