zoukankan      html  css  js  c++  java
  • socket编程:客户端与服务器间的连接以及各函数的用法

    在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法。这样:我们在写一些简单的socket编程时就不用被那么多函数和调用顺序所迷惑了。下面看UNP书上给的图片描述的建立连接的过程,看了之后一目了然!

        1.建立连接的概括图

        2.各个函数的用法:

          (1).socket()

            包含文件:#inlcude<sys/socket.h>

            函数原型:int socket(int family, int type, int protocol);

            参数说明:

                a.  family:一般为AF_INET(IPV4协议)

                b.  type  : SOCK_STREAM(字节流套接字)

                        SOCK_DGRAM(数据报套接字)

                      SOCK_SEQPACKET(有序分组套接字)

                      SOCK_RAW(原始套接字)

                c.  protocol:IPPROTO_TCP(TCP传输协议)

                         IPPROTO_UDP(UDP传输协议)

                       IPPROTO_SCTP( SCTP传输协议)

            返      回:若成功则为非负描述符,若出错则为-1;

            功  能:指定期望的通信协议类型(使用IPV4的TCP,使用IPV6的UDP,UNIX域字节流协议)。

          (2) . bind()

            包含文件:#include<sys/socket>

            函数原型:int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

            参数说明:

                 a. sockfd: 套接字描述符

                 b. myaddr: 指向特定于协议的地址结构指针

                 c. addrlen: 地址结构的长度。

              返  回:若成功返回0,若出错则返回-1。

            功  能:把一个本地协议赋予一个套接字。对于网际网协议,协议地址是32为的IPV4地址或128位的IPV6地址与16位的TCP或UDP端口号的组合。

          (3) . listen()

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

            函数原型:int listen(int sockfd, int backlog);

            参数说明:

                 a. sockfd: 套接字描述符

                 b. baklog: (待研究,一般给默认值)

            返  回:若成功为0,若出错则为-1。

            功  能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。

          (4) . accept()

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

            函数原型:int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

            参数说明:

                 a. sockfd: 监听套接字描述符(由socket创建,随后用作bind和listen的第一个参数的描述符)

                 b. cliaddr: 指向套接字地址结构的指针

                 c.  addrlen:指向套接字地址结构的大小

            返  回:返回一个已连接套接字描述符。监听套接字描述符整个服务器期间只建立一个,而已连接套接字会有多个,对应相应的进程。

            功  能:用于从已完成连接队列队头返回下一个已完成连接,如果已完成队列连接队列为空,那么进程被投入睡眠(即阻塞)

          (5) . connect()

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

            函数原型:int connect(int sockfd, struct sockaddr *servaddr, socklen_t *addrlen);

            参数说明:

                 a. sockfd: 监听套接字描述符

                 b. cliaddr: 指向

            返  回:若成功为0,若出错则为-1

            功  能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。

          (6). close()

            包含文件:#include<unistd.h>

            函数原型:int close(int sockfd);

            参数说明:sockfd:要关闭的套接字的描述符

            返  回:若成功为0,若出错则为-1

            功  能:关闭套接字,并终止TCP连接。返回调用进程

  • 相关阅读:
    第一章 简介(待续)
    第十六章 漫话网站架构师(待续)
    第十五章 网站架构师职场攻略(待续)
    第十四章 架构师领导艺术(待续)
    第十三章 大型网站典型故障分析案例(待续)
    上帝造题的七分钟2/花神游历各国/GSS4 线段树维护区间开方 By cellur925
    LuoguP1606 [USACO07FEB]荷叶塘Lilypad Pond 【最短路】By cellur925
    NOIp2013 车站分级 【拓扑排序】By cellur925
    NOI题库--盒子和小球系列 By cellur925
    关于对动态规划的思考 【转】
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/3333935.html
Copyright © 2011-2022 走看看