套接字 socket
套接字概念
套接字是一種程序間通訊的方法,不同於以往介紹的的程序通訊方法的是,它並不侷限於同一臺計算機的資源,例如共享內容或者訊息佇列。
一台機器上的程序可以使用套接字與另一台機器上的程序通訊。因此客戶與伺服器可以分散到網路中。
同一臺機器的程序間也可以用套接字通訊。
套接字的工作過程(伺服器端)
首先,伺服器應用程式通過socket系統呼叫建立乙個套接字,它是系統分配給該伺服器程序的類似檔案描述符的資源,不能與其他程序共享。
其次,伺服器程序使用bind系統呼叫個套接字命名。
接下來,伺服器程序開始等待客戶連線到這個命名套接字,呼叫listen建立乙個等待佇列,以使存放來自客戶的進入連線。
最後,伺服器通過accept系統呼叫來接受客戶的連線。此時,會產生乙個與原有的命名套接字不同的新套接字,它僅用於與這個特定的客戶端,而命名套接字則被保留下來繼續處理來自其他客戶的連線。
套接字的工作工程(客戶端)
呼叫socket建立乙個未命名套接字,將伺服器的命名套接字作為乙個位址來呼叫connect與伺服器建立連線。
一旦建立了連線,就可以像使用底層檔案描述符那樣來用套接字進行雙向的資料通訊。
套接字的屬性
套接字的特性由三個屬性決定:
型別(type)
協議(protocol)
套接字舉例
客戶端程式:建立乙個未命名的套接字,然後把它連線到伺服器套接字server_socket上,向伺服器寫乙個字元,再讀回經伺服器處理後的乙個字元。
伺服器端程式:首先建立乙個伺服器套接字,繫結乙個名字,然後建立乙個監聽佇列,接收來自客戶程式的連線。
client1.c
#include #include #include #include #include #include int main()
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char from server = %c\n", ch);
close(sockfd);
exit(0);
}
server1.c
#include #include #include #include #include int main()
}
套接字(二) Socket 套接字程式設計(附例項)
tcp ip位址家族統一的套接字位址結構定義如下 struct sockaddr in sin family 指定使用該套接字位址的位址家族。這裡必須設定為af inet,表示程式所使用的位址家族是tcp ip sin zero 8 主要是為了與第乙個版本的套接字位址結構大小相同而設定,實際使用時,...
socket網路程式設計和套接字
網路程式設計就是編寫程式使得兩台聯網的計算機進行資料的交換。套接字是網路傳輸時使用的軟體裝置,因此我們可以通過套接字來實現資料傳輸。由於網路程式設計中涉及到了兩台聯網計算機,所以我們將其分為伺服器端和客戶端,顧名思義,伺服器端是用來受理連線請求,客戶端是用來請求連線。注意 現在介紹的函式都是在lin...
套接字 Socket 定義
套接字介面可分為三類 公認埠 註冊埠 動態和 或私有埠 套接字,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程 應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料...