Socket 函数

梦想的初衷 提交于 2020-02-24 01:38:15

Socket 小结

函数

注意 accept connect send recv

  1. socket()

    #include<sys/types.h>
    #include<sys/socket.h>
    int socket(int family,int type,int protocal);
    
    int family //参数指定所要使用的通信协议
    AF_UNIX // Unix 内部协议 
    AF_INET // Internet 协议 
    AF_Ns   //Xerox NS 协议
    AF_IMPLINK //IMP 连接层 
    
    int type //指定套接字的类型
    SOCK_STREAM//流套字
    SOCK_DGRAM//数据报套字
    SOCK_RAW  //未加工套接字
    SOCK_SEQPACKET//顺序包套接字
        
    int protocal //参数常设置为 0
    
    //socket()系统调用返回一个整数值,叫做套接字描述字 sockfd
    //失败 返回-1
  2. bind()

    #include<sys/types.h>
    #include<sys/socket.h>
    int bind(int sockfd,struct sockaddr *myaddr,int addrlen);
    //这个调用将一个名字命名给一个没有名字的套接字
    //第二个参数 myaddr 是指向一个特定协议地址的指针
    //第三个参数是这个地址结构的大小
    
    //bind()有三个作用: 
    //服务器在系统里登记它们的地址 
    //客户为它自己注册一个地址 
    //一个没有连接的客户确保系统固定分配给它一个唯一的地址 
    
    //成功返回0  失败返回-1
  3. connect()

    #include<sys/types.h>
    #include>sys/socket.h>
    int connect(int sockfd,struct sockaddr *servaddr,int addrlen);
    
    //客户端调用
    //sockfd  调用socket函数产生的
    //servaddr 服务器的信息
    //这个过程在 socket()调用后,将一个套接字描述符和一个与服务器建立的 连接的联系
    //成功返回0 失败返回-1

    客户端调用

    sockfd 调用socket函数产生的

    servaddr 服务器的信息

  4. listen

    #include<sys/types.h>
    #include<sys/socket.h>
    int listen(int sockfd,int backlog);
    
    //面向连接的服务器使用这个系统调用,来表示它希望接受连接
    //这个系统调用通常在 socket()和 bind()之后,在 accept()调用之前调用
    //参数 backlog 表示当它们等待执行 accept()系统调用之前
    //系统能对多少个连 接请求进行排队
    
  5. accept()

    #include<sys/types.h>
    #include<sys/socket.h>
    int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
    //服务器调用
    //sockfd   前面服务器端已经bind 的socket描述符
    //addr  传出参数  返回链接客户端地址信息 含IP 和 端口号
    //传入传出参数  传入sizeof(addr) 大小 函数返回时 返回真正接收到地址结构体的大小
    //返回值 成功返回新的socket 文件描述符 用于和客户端通信  败返回-1
    

    服务器调用

    sockfd 前面服务器端已经bind 的socket描述符

    addr 客户端信息

    返回值 成功返回新的socket 文件描述符 用于和客户端通信 失败返回-1

  6. send() recv()

    #include<sys/types.h>
    #include<sys/socket.h>
    
    int send(int sockfd,char *buff,int nbytes,int flags);
    //不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据
    //第一个参数指定   发送端   套接字描述符
    //第三个参数指明   实际要发送   的数据的字节数
    //第四个参数一般置0
    
    int recv(int sockfd,char *buff,int nbytes,int flags);
    //不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据
    //第一个参数指定  接收端   套接字描述符
    //第三个参数指明     buf的长度
    //第四个参数一般置0

    send 发送到另一端

    recv 接受另一端

  7. close()

    #include<sys/types.h>
    #include<sys/socket.h>
    int close(int sockfd);
    
    //关闭一个套接字
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!