[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > 網絡編程 > 正文
UNIX的套接口(Socket)編程簡介
作者:bobdai[bobdai@sohu.com] (2001-04-19 12:48:30)
網絡編程,即編寫通過計算機網絡與其他程序進行通訊的程序。在目前的模式下,相互通信的網絡程序中,一方稱為客戶程序(client),另一方稱為服務程序(server),大多數操作系統都提供了編譯好的網絡程序,比如Web客戶程序(瀏覽器),Web服務器程序,以及FTP,Telnet等,而應用Socket編程接口可以編寫自己的網絡通信程序。在TCP/IP世界中,網絡通訊的基本模式如下:每一台通訊的主機都有一個本網絡環境中唯一的IP地址,一台主機上往往有多個通訊程序存在,每個這樣的程序都要佔用一個通訊端口。因此,一個IP地址,一個通訊端口,就能確定一個通訊程序的位置(某個IP上佔用某個端口的程序)。通訊程序分為服務程序與客戶程序,他們的區別在,服務程序總是被動的等待連接,服務程序一啟動,初始化完畢就進入等待連接狀態;而客戶程序啟動,向遠程服務程序發出連接請求,服務程序收到請求,按照一定的規則建立連接,連接完成,兩個程序就之間就建立了一個虛擬的數據通訊鏈路,這些程序可以直接從自己打開的套接口讀入和寫出數據,而不用關心實際的數據鏈路。下來將介紹兩種基本編程模式:客戶程序和服務程序的編寫。 

客戶程序編寫的基本方法。步驟:創建套接口→與遠程服務程序連接→讀/寫數據→終止連接。創建套接口用socket函數,這個函數有三個參數,第一個參數指定協議族,如AF_INET(IPv4協議),AF_INET6(IPv6協議),AF_LOCAL(Unix域協議);第二個參數為套接口類型,有SOCK_STREAM(字節流套接口),SOCK_DGRAM(數據報套接口),SOCK_RAW(原始套接口);第三個參數一般取0。一般地,AF_INET和SOCK_STREAM的組合對應TCP協議;AF_INET和SOCK_DGRAM的組合對應UDP協議;AF_INET和SOCK_RAW的組合對應IPv4協議。Socket函數成功時返回一個套接口描述字。與遠程服務程序連接使用connect函數,此函數有三個參數。第一個參數為套接口描述字;第二個參數為一個sockaddr結構,這個結構包含了遠程服務程序的IP地址與端口號;第三個參數為sockaddr結構的長度。Connect函數調用成功,套接口描述字就與遠程服務程序建立好了連接,可以開始讀/寫了。讀/寫數據使用read和write函數,這兩個函數均有三個參數。第一個參數為套接口描述字;第二個參數為讀/寫數據的緩沖區;第三個參數為緩沖區的長度。讀寫完可調用函數close關閉套接口,參數為套接口描述字。 

服務程序編寫的基本方法。步驟:創建套接口→綁定套接口→設置套接口為監聽模式,進入被動接受連接請求狀態→接受請求,建立連接→讀/寫數據→終止連接。綁定套接口是為本程序分配一個供使用的通信端口,使用bind函數。調用函數listen套接口進入監聽狀態,再調用accept函數接受連接請求,如果沒有連接請求,accept函數將使程序進入睡眠狀態,直到被遠程客戶程序的請求所喚醒。連接一旦建立讀/寫與客戶程序相同。服務程序一般在設置為監聽模式處不斷的接受請求、處理請求的循環中。 

以上簡要介紹了UNIX的Socket編程,更詳細的資料請參見 << UNIX  Network Programming >> [ W.Richard Stevens 1997 ]。   (http://www.fanqiang.com)
    進入【UNIX論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★