C語言中文網 目錄
首頁 > socket 閱讀:5,058

socket是什么?套接字是什么?

< 上一頁socket 套接字有哪些類型下一頁 >

網絡編程就是編寫程序使兩臺聯網的計算機相互交換數據。這就是全部內容了嗎?是的!網絡編程要比想象中的簡單許多。

那么,這兩臺計算機之間用什么傳輸數據呢?首先需要物理連接。如今大部分計算機都已經連接到互聯網,因此不用擔心這一點。

在此基礎上,只需要考慮如何編寫數據傳輸程序。但實際上這點也不用愁,因為操作系統已經提供了 socket。即使對網絡數據傳輸的原理不太熟悉,我們也能通過 socket 來編程。

什么是 socket?

socket 的原意是“插座”,在計算機通信領域,socket 被翻譯為“套接字”,它是計算機之間進行通信的一種約定或一種方式。通過 socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。

我們把插頭插到插座上就能從電網獲得電力供應,同樣,為了與遠程計算機進行數據傳輸,需要連接到因特網,而 socket 就是用來連接到因特網的工具。

socket是什么?

socket 的典型應用就是 Web 服務器和瀏覽器:瀏覽器獲取用戶輸入的 URL,向服務器發起請求,服務器分析接收到的 URL,將對應的網頁內容返回給瀏覽器,瀏覽器再經過解析和渲染,就將文字、圖片、視頻等元素呈現給用戶。

學習 socket,也就是學習計算機之間如何通信,并編寫出實用的程序。

UNIX/Linux 中的 socket 是什么?

在 UNIX/Linux 系統中,為了統一對各種硬件的操作,簡化接口,不同的硬件設備也都被看成一個文件。對這些文件的操作,等同于對磁盤上普通文件的操作。

你也許聽很多高手說過,UNIX/Linux 中的一切都是文件!那個家伙說的沒錯。

為了表示和區分已經打開的文件,UNIX/Linux 會給每個文件分配一個 ID,這個 ID 就是一個整數,被稱為文件描述符(File Descriptor)。例如:
  • 通常用 0 來表示標準輸入文件(stdin),它對應的硬件設備就是鍵盤;
  • 通常用 1 來表示標準輸出文件(stdout),它對應的硬件設備就是顯示器。

UNIX/Linux 程序在執行任何形式的 I/O 操作時,都是在讀取或者寫入一個文件描述符。一個文件描述符只是一個和打開的文件相關聯的整數,它的背后可能是一個硬盤上的普通文件、FIFO、管道、終端、鍵盤、顯示器,甚至是一個網絡連接。

請注意,網絡連接也是一個文件,它也有文件描述符!你必須理解這句話。

我們可以通過 socket() 函數來創建一個網絡連接,或者說打開一個網絡文件,socket() 的返回值就是文件描述符。有了文件描述符,我們就可以使用普通的文件操作函數來傳輸數據了,例如:
  • 用 read() 讀取從遠程計算機傳來的數據;
  • 用 write() 向遠程計算機寫入數據。

你看,只要用 socket() 創建了連接,剩下的就是文件操作了,網絡編程原來就是如此簡單!

WIndow 系統中的 socket 是什么?

Windows 也有類似“文件描述符”的概念,但通常被稱為“文件句柄”。因此,本教程如果涉及 Windows 平臺將使用“句柄”,如果涉及 Linux 平臺則使用“描述符”。

與 UNIX/Linux 不同的是,Windows 會區分 socket 和文件,Windows 就把 socket 當做一個網絡連接來對待,因此需要調用專門針對 socket 而設計的數據傳輸函數,針對普通文件的輸入輸出函數就無效了。
< 上一頁socket 套接字有哪些類型下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo