posts - 495,comments - 227,trackbacks - 0
          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(46)

          隨筆分類(476)

          隨筆檔案(495)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1396811
          • 排名 - 16

          最新評論

          閱讀排行榜

          評論排行榜

          說明 下一篇
          由于我對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, 它有如下功能:

          1. 等待客戶端建立連接(listen)
          2. 當客戶端建立發送連接請求時,能接受請求,完成鏈路建立(accept)
          3. 關閉(close)

          對于client socket,它有如下功能:

          1. 建立鏈路(connect)
          2. 發送數據(send)
          3. 接收數據(recv)
          4. 關閉(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 閱讀(562) 評論(0)  編輯  收藏 所屬分類: C++
          主站蜘蛛池模板: 阳信县| 玉门市| 永仁县| 斗六市| 呼和浩特市| 朔州市| 蒙自县| 葫芦岛市| 宝鸡市| 汨罗市| 永宁县| 景德镇市| 安化县| 张掖市| 丽江市| 筠连县| 喀什市| 普安县| 石首市| 修武县| 舟山市| 科技| 密云县| 吉隆县| 湖口县| 遵化市| 龙山县| 深泽县| 樟树市| 花莲县| 新乡县| 巴彦淖尔市| 玉溪市| 手机| 绥芬河市| 蒲城县| 银川市| 连山| 油尖旺区| 新民市| 苗栗县|