日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux网络编程 之 套接字(四)

發布時間:2024/2/28 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux网络编程 之 套接字(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄
1. 套接字的定義
2. 套接字的創建方法
3. 套接字的地址

  • 本地套接字
  • 網絡套接字

1. 套接字的定義

套接字是一種通信機制(通信的兩方的一種約定),憑借這種機制,不同主機之間的進程可以進行通信。我們可以用套接字中的相關函數來完成通信過程。

2. 套接字的創建方法

#include <sys/socket.h> int socket(int family,int type,int protocol);

參數:

  • family:協議族

    指定套接字通信中使用的網絡介質,最常見的套接字域是 AF_UNIX 和 AF_INET。

    AF_UNIX用于通過 Unix 和 Linux 文件系統實現的本地套接字

    AF_INET用于 Unix 網絡套接字。AF_INET 套接字可以用于通過包括因特網在內的 TCP/IP 網絡進行通信的程序。

  • type:套接字類型

    流套接字(SOCK_STREAM)

    流套接字用于提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復發送,并按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在于其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。

    數據報套接字(SOCK_DGRAM)

    數據報套接字提供了一種無連接的服務。該服務并不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重復,且無法保證順序地接收到數據。數據報套接字使用UDP(User Datagram Protocol)協議進行數據的傳輸。由于數據報套接字不能保證數據傳輸的可靠性,對于有可能出現的數據丟失情況,需要在程序中做相應的處理。

    原始套接字(SOCK_RAW)

    原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和數據報套接字)的區別在于:原始套接字可以讀寫內核沒有處理的IP數據包,而流套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。因此,如果要訪問其他協議發送數據必須使用原始套接字。

  • protocal:套接字協議

    協議類別(0、IPPROTO_TCP、IPPROTO_UDP等),設為 0 表示使用默認協議。

  • int socket(int family,int type,int protocol);該構造方法成功則返回一個套接字,失敗子返回一個小于0的整數。

    3. 套接字的地址

    創建了一個套接字后,還必須進行綁定地址才能使用這個套接字。

    本地套接字

    對于本地套接字 AF_UNIX 來說,首先它的創建的域參數應該是PF_LOCAL或者PF_UNIX,而不能用PF_INET之類。本地套接字的通訊類型應該是SOCK_STREAM或SOCK_DGRAM,協議為默認協議。

    創建套接字:

    int sockfd; sockfd = socket(PF_LOCAL, SOCK_STREAM, 0);

    本地套接字的綁定的的地址是struct sockaddr_un結構,truct sockaddr_un結構有兩個參數:sun_family、sun_path。sun_family只能是AF_LOCAL或AF_UNIX,而sun_path是本地文件的路徑。

    sockaddr_un結構體:

    struct sockaddr_un { sa_family_t sun_family; //套接字域 char sun_path[]; //本地文件的路徑 };

    套接字綁定地址:

    struct sockaddr_un sun;sun.sun_family = AF_LOCAL;strcpy(sun.sun_path, filepath);bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));

    網絡套接字

    而網絡套接字AF_INET的結構由sockaddr_un 來描述:

    struct sockaddr_in { short int sin_family; //套接字域 unsigned short int sin_port; //端口 struct in_addr sin_addr; //IP地址}

    IP 地址結構 in_addr 被定義如下:

    struct in_addr { unsigned long int }

    總結

    以上是生活随笔為你收集整理的Linux网络编程 之 套接字(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。