程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 使用Sockets

使用Sockets

編輯:C語言基礎知識

  使用sockets Socket控件讓你建立一個利用TCP/IP和有關的協議與其他系統進行通信的應用。使用Sockets,你能夠讀和寫通過它連接的其他機器,而不用擔心實際的網絡軟件的相關細節。Sockets提供基於TCP/IP協議的連接。除此以外還能很好的工作,在其他相關的協議,例如Xerox Network System (XNS), Digital's DEC net, or Novell's IPX/SPX 家族。
   C++ Builder提供你寫網絡服務器或客戶應用程序去讀和寫其他的系統。一個服務或客戶程序通常專注於一個單一的服務如超文本傳送協議(HTTP)或文件傳輸協議(FTP)。使用server sockets,一個應用程序可以提供這些服務中的一個去連接一個希望使用服務的客戶程序。Client sockets答應一個應用使用這些服務中的一個去連接提供這個服務的服務應用。
   使用sockets去寫應用程序,你必須理解下面這些知識:
   一、服務工具
   當你需要寫網絡服務或客戶應用時,Sockets提供一種接合。對於許多服務,象
   HTTP 或 FTP,第三方服務商提供這些服務已經相當有效。有些甚至隨著操作系統捆綁而來,以便不用你自己寫。然而,當你想更多的控制服務的實現,如想讓你的應用程序與網絡通信更加緊密,或當沒有一個服務能提供你非凡需要的服務時,你可能想建立你自己的服務或客戶應用。例如,工作在分布式data sets時,你可能想為數據庫寫一層與其他系統通信的應用。想使用Sockets實現一個服務,你必須理解:
  
   1.服務協議
   在你寫一個網絡服務或客戶程序前,你必須明白你的應用將提供或使用什麼服務。你的網絡應用必須支持許多服務的標准協議。假如你為標准的服務例如HTTP,FTP寫網絡應用,或even finger or time,你必須先理解與其他系統通信所使用的協議。非凡服務細節你必須看提供的或使用的文檔。
   假如你的應用程序提供一個新的服務與其他系統通信,第一步是為這個服務的
   服務端和客戶端設計通信協議。什麼信息將發送?如何整理這些信息?如何對這些信息進行編碼?
  
   應用程序通信
   經常的,你的網絡服務端或客戶端應用程序要提供一層在網絡軟件和一個應用之間使用的服務。例如,一個HTTP服務站點在INternet與一個Web 服務應用之間為HTTP請求信息提供內容和應答。
   在你的網絡應用(或客戶應用)和網絡軟件之間Sockets 提供一個接口。你必須提供一個接口,在你的應用程序與應用間使用。你可以拷貝第三方服務商提供的標准API(例如ISAPI),或你可以設計和發布你自己的API.
  
   2.理解服務和端口
   許多標准服務都有關聯的、指定的端口號。當 執行服務時,你可以為服務考慮一個端口號。假如你實現一個標准服務, Windows socket objects 提供一些方法讓你為服務尋找端口號。假如提供一個新的服務,在基於Windows 95 或 NT機器上,你能夠在文件Services中為你的服務指定一個相關聯的端口號。設置Services文件的更多信息請看微軟 的Windows Sockets文檔。
  
   二、Socket連接的類型
   Socket連接可以分成三個基本的類型,它們反映了如何開始連接和本地Socket 連接是什麼。這三個類型是:
  
   1.客戶端連接
   客戶端連接是一個本地系統的客戶端socket與一個遠程系統上的服務端Socket連接。客戶端連接由客戶端Socket開始。首先,客戶端Socket必須描述它想連接到的服務端Socket. 接著客戶端socket查找服務端socket,當找到服務器時,就要求連接。服務端socket可能不能完成正確的連接。服務器sockets維持一個客戶端請求隊列,在他們有時間時完成連接。當服務端socket接受客戶端連接,服務端socket
   將向它想連接的客戶socket發送一個完整的描述,客戶端的連接完成。
  
   2.傾聽連接
   服務器 socket不會去定位客戶端,代替的,他們形成被動的,"半連接"狀態,傾聽來自客戶端的請求。服務器 sockets形成一個隊列,存放 它們聽到的連接請求。這個隊列記錄著客戶端連接請求就象他們已連接進來一樣。當服務器sockets同意客戶連接請求時,它形成一個新的socket去連接客戶端,因此這個傾聽連接能保持開放狀態答應其他客戶端請求。
  
   3.服務端連接
   當傾聽socket同意一個客戶端請求時,服務器端socket形成一個服務器連接。當服務器端同意連接時,向客戶端發送一個服務端socket描述以完成連接,當客戶端socket收到這個描述時這個連接得到確認,連接完成。一但連接到客戶端的Socket完成,服務端連接就不能識別從一個客戶端來的連接。末端雙方有同樣的能力去接收同樣的事件類型。只有傾聽(listening)連接是根本不同的,它只有一個單一的末端。
  
   三、sockets描述
   Sockets讓你的網絡應用軟件通過網絡與其他系統進行通信。在網絡連接中每個socket可以看成一個終端點。它有一個指定的地址。
  
   *這個系統正在運行
   *它理解的接口類型
   *用來連接的端口
   一個完整的socket連接描述,你必須提供sockets 在連接兩端的地址。在你開始一個socket連接前,你必須完整的描述你想得到的連接。有些信息可以從你的應用
   軟件運行的系統平台上得到。例如,你不需要描述一個客戶端socket的本地IP地址--這個信息可以從操作系統上獲得。你必須提供你工作所依靠的socket的類型的信息。客戶端socket必須描述他們想連接的服務器。偵聽服務器sockets必須描述他們提供反應的服務器的端口。一個socket 連接終端的完整描述包括兩部分:
  
  
   1.IP地址
   主機是這樣一個系統,它運行著包含有socket的應用程序。你必須描述主機給socket,通過給出主機的IP地址來完成這個描述。IP地址是一個有四個數字(byte)值的,在標准internet點付內的字符串。
   例如123.197.1.2
   一個簡單的系統可以支持多於一個的IP地址。IP地址通常難於記憶並且輕易打錯。一個可供選擇的方法是使用主機名。主機名就是IP地址的別名,它就是你常看到的統一資源定位(URLs)。它是一個字符串,包括了域名和服務。
   例如 http://www.wsite.com
   許多內部網提供給主機的名字對應的系統IP地址是internetIP地址。在windows95 和NT機器上,假如一個主機名不能用,你可以在HOSTS文件中為你的本地IP地址(這個本地IP地址應該是指你想連接的主機IP地址--zyqsj)建立一個進入的名字。
   關於HOSTS文件的更多信息請看WINDOWS SOCKETS的文檔。
   服務器sockets不需要指定主機。本地IP地址可以從系統中讀到。假如本地系統支持多於一個的IP地址,服務器sockets將同時在所有的IP地址上偵聽客戶端請求。當一個服務器socket同意一個連接,客戶端提供一個遠程IP地址。客戶sockets必須指定遠程主機通過提供主機名或者IP地址。
  
   在主機名和IP地址間作一個選擇
   許多應用軟件使用一個主機名去指定一個系統。主機名輕易記住和輕易檢查排版錯誤。進一步講,服務器能改變系統或與IP地址關聯的非凡的主機名。使用一個主機名,能夠答應客戶端通過主機名描述找到抽象的站點,即使主機使用一個新的IP地址。
   假如主機名是未知的,客戶socket必須指定服務器系統使用的IP地址。通過給一個IP地址來指定服務器將更快。當你提供主機名時,socket在定位服務器系統前,必須搜尋與這個主機名相關的IP地址。
  
   2.端口號
   雖然IP得地址提供了足夠的信息去找到socket連接中位於另一端的系統,你通常還需要指定那個系統的端口號。沒有端口號,一個系統在同一時間只能進行一個單一的連接。端口號是唯一標識那答應一個獨立系統連接到支持同時多個連接的主機,每個連接都必須指定一個端口號。
   在網絡應用中,對於服務器工具來說端口號是一個數字代碼。有一個習慣就是偵聽服務連接到他們自己固定的端口號上,以便他們能找到客戶端sockets.服務器socket監聽為他們提供服務的相關端口號。當他們答應給予一個客戶端socket連接時,他們創建一個獨立的socket連接,使用不同的專用的端口號。通過這個方法,能持續的監聽相關服務的端口號。
   客戶端socket使用一個專用的本地端口號,就不用其他的socket去尋找它們。他們指定他們想連接的服務器端socket的端口號,這樣他們就能找到服務器應用程序。經常的,這個端口號是通過命名想連接的服務來間接指定的。
  
   四、使用socket控件
   C++Builder提供兩個socket控件,客戶端sockets和服務器sockets.他們答應你的網絡應用構成連接其他的機器和答應你通過這個連接來讀寫信息。與每個socket控件相關聯的是windows socket對象,它們在終端的的作用是一個實際的socket連接。socket控件使用windows socket對象去封裝windows socket API 調用,所以你的應用不用去關心連接建立的細節或治理socket信息。
   假如你想利用windows socket API調用或自定義連接細節,socket控件提供了便利,你可以使用windows socket對象的properies,events和方法。
  
   1.使用客戶端sockets
   添加一個客戶端socket控件(TClientSocket)到你的form或data module 使你的應用成為一個TCP/IP客戶。客戶sockets答應你指定你想連接的服務器socket和你希望服務器提供的服務。一但你描述你想得到的連接,你可以使用客戶socket控件去完成連接服務。
   每個客戶socket控件使用獨立的客戶windows socket對象(TClientWinSocket)去應答連接中的客戶終端。使用客戶sockets去:
  
   A.指定想得到的服務
   客戶socket控件有一個數字properties,答應你指定想連接的服務器系統和端口。你可以通過主機名來指定服務器系統,使用Host property。
   假如你不知道主機名,或者你關心找到服務器的速度,你可以指定服務器系統的IP地址,通過使用 Address property。你必須指定IP地址和主機名中的一個。
   假如你兩個都指定,客戶socket控件將
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved