4、linux网络编程--套接字的介绍
?一、套接字概述:
????套接字是一種通信機制(通信兩方的一種約定),憑借這種機制,不同主機之間的進程可以進行通信。我們可以用套接字中的相關(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发的HashMap为什么会引起死循环?
- 下一篇: 7、linux网络编程--广播