Linux套接字基礎程式設計

2021-06-18 14:55:11 字數 1438 閱讀 9881

所謂套接字,其實就是通訊端點的抽象。

而套接字程式設計,就是解決伺服器端跟客戶端之間的通訊問題。

先說伺服器端,簡單的概括,分為四步:

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...