Posted on 2012-06-04 12:24
C小加 閱讀(1749)
評論(0) 編輯 收藏 引用 所屬分類:
網(wǎng)絡編程
面向連接的Socket通信是基于TCP的。網(wǎng)絡中的兩個進程以客戶機/服務器模式進行通信
服務器程序要先于客戶機程序啟動,每個步驟中調用的Socket函數(shù)如下:
(1)調用WSAStartup()函數(shù)加載Windows Sockets動態(tài)庫,然后調用socket()函數(shù)創(chuàng)建一個流式套接字,返回套接字號s。
(2)調用bind()函數(shù)將套接字s綁定到一個已知的地址,通常為本地IP地址。
(3)調用listen()函數(shù)將套接字s設置為偵聽模式,準備好接收來自各個客戶機的連接請求。
(4)調用accept()函數(shù)等待接受客戶端的連接請求。
(5)如果接收到客戶端的請求,則accept()函數(shù)返回,得到新的套接字ns。
(6)調用recv()函數(shù)接收來自客戶端的數(shù)據(jù),調用send()函數(shù)向客戶端發(fā)送數(shù)據(jù)。
(7)與客戶端的通信結束后,服務器程序可以調用shutdown()函數(shù)通知對方不再發(fā)送或接收數(shù)據(jù),也可以由客戶端程序斷開連接。斷開連接后,服務器進程調用closesocket()函數(shù)關閉套接字ns。此后服務器程序返回第4步,繼續(xù)等待客戶端進程的連接。
(8)如果要退出服務器程序,則調用closesocket()函數(shù)關閉最初的套接字s。
客戶端程序在每一步驟中使用的函數(shù)如下:
(1)調用WSAStartup()函數(shù)加載Windows Sockets動態(tài)庫,然后調用socket()函數(shù)創(chuàng)建一個流式套接字,返回套接字號s。
(2)調用connect()函數(shù)將套接字s連接到服務器。
(3)調用send()函數(shù)向服務器發(fā)送數(shù)據(jù),調用recv()函數(shù)接收來自服務器的數(shù)據(jù)。
(4)與服務器的通信結束后,客戶端程序可以調用shutdown()函數(shù)通知對方不再發(fā)送或接收數(shù)據(jù),也可以由服務器程序斷開連接。斷開連接后,客戶端進程調用closesocket()函數(shù)關閉套接字。