Socket應用框架
一、BSDsocket常常構造兩種應用類型:
1、面向連接的SOCK_STREAM應用:它是基於TCP協議的應用。
連接後雙方數據以流的形式發送和接收,可以通過I/O系統基本調用read/write或者專門的BSDsocket調用send/recv。
服務器端在處理客戶連接請求時有兩種不同設計:
併發處理:建立連接後,創建一個新任務處理隨後過程,服務器繼續創建生成新任務。
循環處理:服務器直接和客戶交互,服務結束關閉連接後才接受下一個客戶連接請求。
面向連接的socket應用:
a、創建socket
int socket(int domain,int type,int protocol);
domain表明通信域,type指定socket類型,protocol表示該socket屬於那種通信協議。procotol=0表明用的是SOCK_STREAM和SOCK_DGRAM協議。
b、綁定端點地址
調用爲:STATUS bind (int s,struct sockaddr*name,int namelen);
s爲socket描述符,name爲要綁定的本地端點地址,namelen爲name的結構體長度。
c、建立連接
客戶端通過connect()調用指明和遠端的另一個端點地址建立一個TCP的socket連接。因此客戶端需要指定連接的遠程端地址。
STATUS connect(int s,struct sockaddr*name,int namelen);
d、在連接的socket上發送和接收
read(s,buf,buflen);/*接收socket數據*/
write(s,buf,buflen);/*發送socket數據*/
s已經連接的socket描述符,buf接收/發送的數據放入的目標緩衝區,buflen期待接收/發送多少字節。
e、關閉連接
當客戶或服務器不需要socket連接時,調用close()將其關閉。
2、面向無連接的SOCK_DGRAM應用:它是基於UDP協議的應用
socket可以和任意的服務器通信,服務器socket收到的數據報也可能來自任意客戶。
無連接socket和有連接socket區別:
a、無連接的發送有sendto完成;接收由recvfrom完成。
b、無連接socket調用connect
無連接socket調用connect指明一個目的地端點地址,但是connect不建立一個傳輸層連接,而是將目的地端點地址立即放入該socket的系統數據結構中。