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


    ​一、套接字概述:

        套接字是一种通信机制(通信两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。

        套接字的特性有三个属性确定:域(domain),类型(type),协议(protocol)。

    二、套接字的域

        域指定套接字通信中使用的网络介质,最常见的就是AF_INET(ipv4),xuduolinux局域网1都是实用的该网络,当然1因特网自身用的也是他。

    三、套接字类型:

    流套接字:SOCK_STREAM:用于提供面向连接,可靠的数据传输服务。

    数据报套接字:SOCK_DGRAM:提供了面向无链接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中出现丢失。

    原始套接字:SOCK_RAW:原始套接字可以读写内核没有处理的ip数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

    四、套接字协议(协议类型)

    创建套接字:socket系统调用创建一个套接字并返回一个描述符,该描述符可以用来访问该套接字。

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

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

    功能:创建一个用于网络通信的socket套接字(描述符)

    参数:family:协议族

    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 */

    创建 UDP 套接字示例:

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片

    1. int sockfd;  

    2. sockfd = socket(AF_INET, SOCK_DGRAM, 0);  

    3. if(sockfd < 0)  

    4. {  

    5.     perror("socket");  

    6.     exit(-1);  

    7. }  

    套接字地址

    每个套接字(端点)都有其自己的地址格式,对于 AF_UNIX 套接字来说,它的地址由结构 sockaddr_un 来描述,该结构体定义在头文件 sys/un.h 中,如下:

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片

    1. struct sockaddr_un {  

    2.     sa_family_t  sun_family; //套接字域  

    3.     char         sun_path[];//名字  

    4. };  

    而在 AF_INET 域中,套接字地址结构由 sockaddr_in 来指定,该结构体定义在头文件 netinet/in.h 中:

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片

    1. struct sockaddr_in {  

    2.     short int  sin_family;//套接字域  

    3.     unsigned short int   sin_port;//端口  

    4.     struct in_addr   sin_addr;  

    5. }  

    IP 地址结构 in_addr 被定义如下:

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片

    1. struct in_addr {  

    2.     unsigned long int  

    3. }

  • 相关阅读:
    【PHP】最详细PHP从入门到精通(二)——PHP中的函数
    利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动
    JavaScript面向对象编程—this详解
    利用Hadoop streaming 进行词频统计
    Java 平时作业七
    Java 平时作业六
    Java 平时作业五
    Java 平时作业四
    Java 平时作业三
    JAVA 平时作业二
  • 原文地址:https://www.cnblogs.com/yjds/p/8597417.html
Copyright © 2020-2023  润新知