說明 下一篇
由于我對TCP稍微熟悉,所以本系列文章只描述socket(套接字)接口的TCP編程
在IT領域中,大家經常聽說Client/Server的概念,這個概念是描述了提供服務的一方(服務器)和接受服務的一方(客戶端)之間的拓撲結構。舉例來說,http://www.vckbase.com這個網站提供大家交流和娛樂的服務,他們的計算機對于我們而言就是服務器,而我們的計算機則是客戶端。一般而言,服務器功能比較強大,一個服務器能提供服務給多個客戶端。
對于socket設計而言,我們往往也提到一個服務器端和客戶端的概念,但是它的概念和前面而言基本是不一樣的。這里的概念其實是指在開始通訊時誰先發起連接的過程。
對于通訊的雙方而言,存在一個建立對話通道的過程,該過程的建立必然是一方主動發起的。我們稱呼主動建立鏈路的一方為客戶端,而另外一方為服務器端。(至少我個人這么稱呼,不知道業界是不是都這么說)
在通訊過程中,服務器端必須在某個預先約定的端口等待其他主機建立鏈路,這個過程稱為偵聽(Listen)。客戶端主動建立鏈路的過程成為連接
(Connect)。當服務器端套接字接到一個連接請求后,會生成一個新的套接字。服務器端主機就通過這個套接字和客戶端主機通訊。
在整個過程中,涉及到三個套接字,他們分別是服務器端套接字(我一般稱呼它為server
socket)、客戶端套接字(一般我稱呼它為client
socket)和服務器端套接字創建出來的套接字。在編程過程中,第三種套接字除了不會主動建立鏈路外,功能和client
socket完全一致,因此我也把它稱為client socket。為了區別,對于客戶端的client
socket,大家可以稱呼它為主動client socket(Active Client Socket,
ACS),而對服務器端的那個客戶端套接字,則稱為被動client socket(Passive Client Socket,
PCS)。一般情況下,我們沒有必要區分ACS和PCS,因為PCS的功能是ACS的一個部分,ACS只多一項功能而已。在后文中,我將不區分這兩種
client socket
對于server socket, 它有如下功能:
- 等待客戶端建立連接(listen)
- 當客戶端建立發送連接請求時,能接受請求,完成鏈路建立(accept)
- 關閉(close)
對于client socket,它有如下功能:
- 建立鏈路(connect)
- 發送數據(send)
- 接收數據(recv)
- 關閉(close)
一個簡單的通訊過程應該這樣:
- server socket開始偵聽(listen)
- client socket開始連接(connect)
- server socket接受連接(accept)
- ACS和PCS開始互相發送數據(send/recv)
- ACS或PCS關閉鏈路(close)
- server socket關閉(close)
本系列將根據以上過程介紹socket編程的方方面面。由于阻塞套接字相對簡單,我會先從阻塞套接字(也就是伯可力套接字)編程開始,之間會穿插一些多線程的知識。很多方面我也沒用過,所以有些東西只能邊試邊寫,和大家探討。
posted on 2008-07-03 15:15
SIMONE 閱讀(558)
評論(0) 編輯 收藏 所屬分類:
C++