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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

4、linux网络编程--套接字的介绍

發(fā)布時間:2025/7/25 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4、linux网络编程--套接字的介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?一、套接字概述:

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

????套接字的特性有三個屬性確定:域(domain),類型(type),協(xié)議(protocol)。

二、套接字的域

????域指定套接字通信中使用的網(wǎng)絡(luò)介質(zhì),最常見的就是AF_INET(ipv4),xuduolinux局域網(wǎng)1都是實用的該網(wǎng)絡(luò),當(dāng)然1因特網(wǎng)自身用的也是他。

三、套接字類型:

流套接字:SOCK_STREAM:用于提供面向連接,可靠的數(shù)據(jù)傳輸服務(wù)。

數(shù)據(jù)報套接字:SOCK_DGRAM:提供了面向無鏈接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃?#xff0c;數(shù)據(jù)有可能在傳輸過程中出現(xiàn)丟失。

原始套接字:SOCK_RAW:原始套接字可以讀寫內(nèi)核沒有處理的ip數(shù)據(jù)包,而流套接字只能讀取TCP協(xié)議的數(shù)據(jù),數(shù)據(jù)報套接字只能讀取UDP協(xié)議的數(shù)據(jù)。因此,如果要訪問其他協(xié)議發(fā)送數(shù)據(jù)必須使用原始套接字。

四、套接字協(xié)議(協(xié)議類型)

創(chuàng)建套接字:socket系統(tǒng)調(diào)用創(chuàng)建一個套接字并返回一個描述符,該描述符可以用來訪問該套接字。

頭文件:#include<sys/socket.h>

int socket(int family,int type ,int protocol);

功能:創(chuàng)建一個用于網(wǎng)絡(luò)通信的socket套接字(描述符)

參數(shù):family:協(xié)議族

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #define AF_UNSPEC???????0???????????????/* unspecified */ #define AF_UNIX?????????1???????????????/* local to host (pipes, portals) */ #define AF_INET?????????2???????????????/* internetwork: UDP, TCP, etc. */ #define AF_IMPLINK??????3???????????????/* arpanet imp addresses */ #define AF_PUP??????????4???????????????/* pup protocols: e.g. BSP */ #define AF_CHAOS????????5???????????????/* mit CHAOS protocols */ #define AF_IPX??????????6???????????????/* IPX and SPX */ #define AF_NS???????????6???????????????/* XEROX NS protocols */ #define AF_ISO??????????7???????????????/* ISO protocols */ #define AF_OSI????????? AF_ISO??????????/* OSI is ISO */ #define AF_ECMA?????????8???????????????/* european computer manufacturers */ #define AF_DATAKIT??????9???????????????/* datakit protocols */ #define AF_CCITT????????10??????????????/* CCITT protocols, X.25 etc */ #define AF_SNA??????????11??????????????/* IBM SNA */ #define AF_DECnet???????12??????????????/* DECnet */ #define AF_DLI??????????13??????????????/* Direct data link interface */ #define AF_LAT??????????14??????????????/* LAT */ #define AF_HYLINK???????15??????????????/* NSC Hyperchannel */ #define AF_APPLETALK????16??????????????/* AppleTalk */ #define AF_NETBIOS??????17??????????????/* NetBios-style addresses */ #define AF_VOICEVIEW????18??????????????/* VoiceView */ #define AF_FIREFOX??????19??????????????/* FireFox */ #define AF_UNKNOWN1?????20??????????????/* Somebody is using this! */ #define AF_BAN??????????21??????????????/* Banyan */ #define AF_MAX??????????22

套接字類型:socket

?

1 2 3 4 5 6 7 * Types ?*/? #define SOCK_STREAM?????1???????????????/* stream socket */ #define SOCK_DGRAM??????2???????????????/* datagram socket */ #define SOCK_RAW????????3???????????????/* raw-protocol interface */ #define SOCK_RDM????????4???????????????/* reliably-delivered message */ #define SOCK_SEQPACKET??5???????????????/* sequenced packet stream */

創(chuàng)建 UDP 套接字示例:

?

[objc]?view plaincopy

?

?

  • int?sockfd;??

  • sockfd?=?socket(AF_INET,?SOCK_DGRAM,?0);??

  • if(sockfd?<?0)??

  • {??

  • ????perror("socket");??

  • ????exit(-1);??

  • }??

  • ?

    ?

    套接字地址

    每個套接字(端點)都有其自己的地址格式,對于 AF_UNIX 套接字來說,它的地址由結(jié)構(gòu) sockaddr_un 來描述,該結(jié)構(gòu)體定義在頭文件 sys/un.h 中,如下:

    [objc]?view plaincopy

    ?

    ?

  • struct?sockaddr_un?{??

  • ????sa_family_t??sun_family;?//套接字域??

  • ????char?????????sun_path[];//名字??

  • };??

  • ?

    而在 AF_INET 域中,套接字地址結(jié)構(gòu)由 sockaddr_in 來指定,該結(jié)構(gòu)體定義在頭文件 netinet/in.h 中:

    [objc]?view plaincopy

    ?

    ?

  • struct?sockaddr_in?{??

  • ????short?int??sin_family;//套接字域??

  • ????unsigned?short?int???sin_port;//端口??

  • ????struct?in_addr???sin_addr;??

  • }??

  • ?

    IP 地址結(jié)構(gòu) in_addr 被定義如下:

    ?

    [objc]?view plaincopy

    ?

    ?

  • struct?in_addr?{??

  • ????unsigned?long?int??

  • }

  • ?

    轉(zhuǎn)載于:https://www.cnblogs.com/yjds/p/8597417.html

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的4、linux网络编程--套接字的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。