socket套接字就是對網路中不同主機上的應用程序之間進行雙向通訊的端點的抽象。乙個套接字就是網路上程序通訊的一端,提供了應用層程序利用網路協議交換資料的機制。 為了完成網路應用程式開發(區域網,廣域網)系統提供的一組函式介面。
socket pair 標示網路中的多個socket鏈結和通訊關係。
//socket建立 ip版本 傳輸協議 socket_dgram|| sock_stream
int socketfd = socket(af_inet6, socket_stream, 0);
sockaddr 初始化網路資訊
struct sockaddr_in addr 網路資訊結構體
addr.sin_family = af_inet or af_inet6 // 協議族 ipv4 ipv6
addr.sin_port = 8000. //埠號
addr.sin_addr.s_addr = 192.168.1.1 //ip位址
繫結網路資訊和套接字
伺服器端需要進行繫結 而客戶端不需要(客戶端使用connect直接進行連線)
bind(socket socket, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
**listen設定監聽佇列:**設定監聽佇列儲存socket,對設定佇列大小的socket進行監聽。
listen(socket sockfd, int size (128));
伺服器等待連線:讓伺服器處於阻塞狀態,等待客戶端socket連線之後才能繼續執行。
返回伺服器的socket 被連線伺服器的套接字 傳出伺服器網路資訊和網路資訊大小
struct sockaddr_in clientaddr;
socklen_t clientsize = sizseof(clientaddr);
socket clientfd = accept(socket sockfd, (struct sockaddr *)&clientaddr, &clientsize);
客戶端請求連線伺服器:根據設定的網路資訊連線伺服器。(無需bind)
connect(socket clientfd, (struct sockaddr *)&sockaddr, sizseof(sockaddr));
向對方傳送或接收資訊: 根據傳入的socket確定接受或傳送方
//傳送時一般為字串真實大小
//接收時一般為定義的字串的長度
int length;
length = recv(socket socket, char * buf, int len, 0);
send(socket, socket, char * buf, length, 0);
/* 為了防止tcp粘包問題
傳送端 先傳送包的大小 然後再傳送包的內容
接收端 先接受包的大小 定義接受資料報偏移量 若資料報過大則需要多次接收
*/
經典的i/o多路復用模型
類 select 模型
較為高效的模型,使用紅黑樹作為遍歷方式
//水平觸發 預設方式 需要處理完所有的就緒資訊才可以繼續下一次的監聽
//邊沿觸發 高效的工作方式 就緒只會通知使用者一次 可以不處理
Linux網路開發環境搭建
linux開發網路環境搭建 主要目的 通過網路連線 pc ubuntu 開發板 配置三者網路在同一網段 pc 進入網路共享中心,進入乙太網屬性 進入 internet協議版本4 屬性 設定 pc 靜態ip ubuntu 命令列輸入 ifconfig 獲得當前ip 如果沒有顯示 ens33 或 lo ...
linux 網路程式設計(1) 開發基礎
linux網路程式設計 宋敬彬 海信工程師。目錄 一 linux os 1.5 os 架構 二 code環境 2.2 gcc 2.3 makefile 2.4 gdb 三 檔案系統 3.1 分類 四 程式程序執行緒 4.1.基本概念 4.2 process 產生 4.3 多個 process的通訊 ...
linux網路管理 Linux網路配置
1.1 linux配置ip位址 1 ifconfig命令臨時配置ip位址 能不能自動獲取ip位址和dns位址,要看有沒有dhcp伺服器 win10上,輸入ipconfig all 會看到是否有dhcp伺服器 ifconfig命令 對此命令更加詳細的解說 傳送門 2 setup工具永久配置ip位址 r...