zoukankan      html  css  js  c++  java
  • Linux_C socket 一些知识

    1.大端字节序,即低地址高字节

    TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。例如上一节的UDP段格式,
    地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,
    也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址
    存0xe8。但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。因此,发
    送主机把1000填到发送缓冲区之前需要做字节序的转换。同样地,接收主机如果是小端字节序的,
    接到16位的源端口号也要做字节序的转换。如果主机是大端字节序的,发送和接收都不需要做转
    换。同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。

    处理方法: htonl/ htons / ntohl / ntohs   (h表示host,  n表示network)

     2.int accept(int s,struct sockaddr * addr,int * addrlen); 此函数中, 最后一个参数int * addrlen 为传入传出参数。由于cliaddr_len是传入传出参数,每次调用accept()之前应该重新赋初值。

    while (1) {
    cliaddr_len = sizeof(cliaddr);
    connfd = accept(listenfd,
    (struct sockaddr *)&cliaddr, &cliaddr_len);
    n = read(connfd, buf, MAXLINE);
    ...
    close(connfd);
    }

     3.客户端是不需要bind()的,因为没要必要使用固定端口,它的端口由内核自动分配。而需要connect()

    客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自
    己的地址,而connect的参数是对方的地址。

  • 相关阅读:
    前端 CSS 与HTML 学习笔记详细讲解
    Python-Django之DRF
    Flask
    flask
    Python
    Python爬虫
    前端开发规范
    为什么 [] == ![] 输出是true?
    javascript准确判断各种数据类型
    JavaScript数组扁平化常用方法总结
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/4099266.html
Copyright © 2011-2022 走看看