在认真的看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连接。返回调用进程

posted on 2013-09-22 21:51  水目沾  阅读(1603)  评论(0编辑  收藏  举报