zoukankan      html  css  js  c++  java
  • 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. }

  • 相关阅读:
    (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
    (学)新版动态表单研发,阶段成果3
    (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
    (学)XtraReport WebService Print 报错
    (原)三星 i6410 刷机 短信 无法 保存 解决 办法
    (原) Devexpress 汉化包 制作工具、测试程序
    linux下网络配置
    apache自带ab.exe小工具使用小结
    Yii::app()用法小结
    PDO使用小结
  • 原文地址:https://www.cnblogs.com/yjds/p/8597417.html
Copyright © 2011-2022 走看看