|
|
Socket 通訊端(Socket) 通訊端是一種通訊機制,它讓client/server系統可以用在單一電腦,或是在網路進行 開發,通訊端的建立方式與管道不同,它將client與server分得很清楚,通訊的機 制可以在用在單一或多重client之上。
Socket建立 Socket系統建立一通訊端與傳回一descriptor以便用來存取通訊端。 int socket(int domain,int type,int protocol); 建立一通訊通道的端點,參數domain指定協議 群組,type參數指定通訊的型態特色, 可能的值包括 SOCK_STREAM 與 SOCK_DGRAM。前者 是一種可排序,以連結為基礎,雙 向可靠資料流,為TCP連結所提供。後者傳送過程並不保證訊息一定抵達,亦不會 將資料重排,此種通訊 由UDP連結所提供。
通訊端位址 每個通訊端網址都需要有自己的位址格式,對AF_INET來說,位址係以sockaddr_in所 指定者,定義在<netinet/in.h>中 struct sockaddr_in address; address.sin_family = AF_INET; / * sin_family */ address.sin_addr.s_addr = inet_addr(argv); / * Internet address */ address.sin_port = htons(9911); / * Port number */
通訊端命名 要讓其他的程序可使用一通訊端,server必須將通訊端命名,所以AF_INET會與IP阜數 字連在一起。 int bind(int socket, const struct sockaddr *address, size_t address_len); bind系統呼叫指定參數指定的位址address到一位命名的通訊端,此通訊端關聯於檔案 descriptor socket,位址結構的長度以address_len傳遞。
建立通訊端佇列 Listen函數使socket處被動的監聽模式,並為該socket建立一個儲存輸入隊列,將服
務請求保存在此隊列中,直到被程序處理為止。 int listen(int socket, int backlog);
接收連結 一旦server程式建立並命名一通訊端, 即可用accept系統呼叫等待的連結。 int accept(int socket, struct sockaddr *address,size_t *address_len);
連結請求 connect啟動和遠端主機連線,有連接導向的TCP需以此做連結,無連結導向的UDP不需 以此做連結。 int connect(int socket, const struct sockaddr *address,size_t address_len);
關閉通訊端 可以呼叫close來終止server與client的通訊連結close(sockfd) 。
|