2017年1月20日 课堂笔记

来源:互联网 发布:周杰伦 红模仿知乎 编辑:程序博客网 时间:2024/06/07 09:48
2017年1月22日 19:02:15

十大问题:
     (1)四层网络模型与七层网络模型
     (2)五类IP的分类
     (3)IP,端口号,网关,DNS,路由,VPN的含义及作用
     (4)TCP与UDP的区别
     (5)三次握手与四次挥手的详细过程
     (6)什么时候使用TCP协议,什么时候使用UDP协议?
     (7)C/S架构和B/S架构的优缺点
     (8)TCP的数据报头组成
     (9)UDP数据爆头的组成
     (10)如何使用UDP实现可靠传输

     网络的问题非常重要,《计算机网络》好好看

     下面写网络的API
  
(1)int socket(in family,int type, int protocol);
         头文件:#include <sys/types.h>
                     #include <sys/socket.h>
         
          形参:①family:遵循的通讯协议,宏:AF_INET  为IPV4(通常写这个),AF_INET6  为IPV6
                    ②type:设置通信的协议类型,TCP协议:SOCK_STREAM,DUP协议:SOCK_DGRAM
                    ③protocol:用来指定socket所使用的传输协议编号,一般置0

          返回值:成功则返回一个套接字,失败返回-1,网络的API失败好像都返回-1

(2)捆绑 
          int bind(int socket,const strust sockaddr *myaddr, socklen_t addrlen);
          结构体:struct sockaddr
                       {
                              u_short sa_family;     填AF_INET时,遵循IPV4
                              char sa_data[14];     14字节的特定协议地址
                       }
              现在一帮用其升级版struct sockaddr_in
                                          {
                                                 short int sin_family;     遵循的协议
                                                  unsigned short int sin_port;     端口号     //不要用网络端口80
                                                  struct in_addr sin_addr;          32位地址          struct in_addr {     unsigned long s_addr};
                                                  unsigned char sin_zero[8];     填0                   
                                          }

               bind函数的作用:将stocket套接字和myaddr等信息捆绑在一起
                    在使用时,要注意:
                              (1)要对addr_in进行初始化:
                                           ①bzero(&servaddr,sizeof(servaddr));   清零函数,在头文件:#include <strings.h>中
                                           ②servaddr.sin_family = AF_INET;
                                           ③servaddr.sin_addr.s_addr = htonl(INADDR_ANY);     //该宏,使本机所以地址都能访问到本机
                                                                                        inet_addr(argv[1]);     函数inet_addr将字符串转换成需要的IP字符串
                                           ④serraddr.sin_port = htons(SERV_PORT);     //自定义的宏,不要写80
                              (2)注意使用struct sockaddr_in时,传参要强制类型转换成struct sockaddr

               返回值:成功返回0,失败返回-1

(3)设置监听器
          int listen(int socket, int backlog);     
                         套接字        监听器个数
           
     返回值:成功返回0,失败返回-1

(4)int accept(int socket, struct sockaddr  *cliaddr, socklen_t *addrlen);     
                        套接字          传出参数,返回客户端的地址和端口号(具体信息,都用这个结构体接,用sockaddr_in时候要强制类型转换)          
                                                最后一个参数为接收结构体的长度
                                             当不需要使用客户端信息时,可以置空

     返回值:失败返回-1,成功返回一个连接表叔父,对该描述符进行读写,相当于,对客户端做接收与发送

 (5)int connect(int socket, struct sockaddr  *cliaddr, socklen_t *addrlen);
                              套接字          服务器信息                    类型的程度
           connect 和bind的形参一致,区别在与bind的参数为自己的,connect为要通信的单位

 (6)发送,接收,可以使用write,send和read,recv函数,文件的函数参考之前的笔记
     
0 0
原创粉丝点击