所謂套接字,其實就是通訊端點的抽象。
而套接字程式設計,就是解決伺服器端跟客戶端之間的通訊問題。
先說伺服器端,簡單的概括,分為四步:
1.建立套接字
int socket(int domain, int type, int protocol);
socket函式的第1個引數表示的是通訊域,詳情見下表
套接字域描述
網域名稱(巨集)
域的作用
af_inet
表示使用ipv4協議
af_inet6
表示使用ipv6協議
af_unix
表示用於非網路環境的程序通訊
af_unspic
未制定域
第2個引數表示套接字的型別,第3個引數表示協議型別
2.將套接字跟客戶端位址繫結
int bind(int sockfd, const struct sockaddr *addr, socklen_t len);
這裡特別說明一下,第2個引數在實際程式設計中使用struct sockaddr_int *addr。因此,在第二個位址結構引數的時候需要做乙個強制型別轉換。
struct sockaddr_in *addr;
/* 設定位址結構 */
addr = (struct sockaddr_in*)malloc(sizeof(struct sockaddr_in));
addr->sin_family = af_inet;
addr->sin_port = 1024;
/* 32位的ip位址,即192.168.11.6,注意應使用網路位元組序進行賦值 */
addr->sin_addr = 0x60ba80c;
bind(fd,(struct sockaddr_in)addr, sizeof(struct sockaddr_in));/* 繫結位址 */
3.監聽客戶端的連線請求
int listen(int sockfd, int backlog);
listen函式的第1個引數用來進行連線請求監聽的套接字描述符,第2個引數表示最多可以排隊等待連線的請求數量。
4.接受連線請求
int accept(int sockfd, struct sockaddr *addr, socklen_t len);
accept函式的第1個引數是乙個建立的套接字描述符,第2個引數是客戶端的位址,第3個引數表示取得的客戶端位址的大小。
現在說說客戶端的實現,就只有兩步:
1.第1步其實跟伺服器端一樣,建立乙個套接字。
2.請求連線
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);
想必引數都不用解釋了吧。
今天不想碼**了,下次再附上一段示例**吧。今天就寫到這裡了。
linux套接字程式設計
套接字是用來進行主機間通訊的,linux的socket和windows差不多,雖然有一定的區別,但是其基本原理與結構是一樣的,因此,一台windows的主機可以和一台linux的主機通過套接字進行通訊。socket採用客戶端與伺服器端的模式使兩台主機進行通訊。首先,伺服器端呼叫函式socket新建乙...
linux套接字基礎
linux套接字基礎 sean 一 套接字位址資料結構 1 針對各種通訊域 struct sockaddr 2 針對internet通訊域 struct sockaddr in 3 專門用來儲存ip位址 linux版本 struct in addr windows版本 struct in addr ...
網路套接字程式設計基礎
struct sockaddr和struct sockaddr in這兩個結構體用來處理網路通訊的位址。struct sockaddr sockaddr in在標頭檔案 include或 include中定義,該結構體解決了sockaddr的缺陷,把port和addr 分開儲存在兩個變數中,如下 s...