LEVEL6DAY2作业

  1. 请选择以下不是socket类型的是:C
    A). 流式套接字 B). 数据报套接字C). 网络套接字D). 原始套接字

  2. socket是一种特殊的文件描述,以下文件IO操作函数不适应于socket的是:A
    A). open() B).close() C). read() D).write()

  3. 以下不是合法的IPV4的地址是:B
    A). 192.168.0.14 B). 10.87.384.31 C).255.255.255.255 D). 127.0.0.1

  4. 以下关于IP地址说法,错误的是:D
    A). IP可以采用数字表示,比如0xe80e0832就可以表示一个IP地址
    B). IPV6的提出主要目的是解决IPV4的IP地址枯竭的问题
    C). 234.76.10.1是一个合法的广播地址
    D). ::1是一个合法的IP地址

  5. 以下关于端口号的说法,错误的是:B
    A). 端口是一个16位的数字,主要用于系统区分不同的网络数据该由那个任务来处
    B).为避免冲突,TCP和UDP端口不能同时使用同一端口
    C).网络数据是由IP地址和端口以及套接字类型决定的
    D).用户编程不可使用1024以下的端口

  6. 请简要总结网络字节序形成的原因,以及网络编程中对应的处理方法

网络字节序形成的原因主要是不同的CPU访问内存中的多字节数据的时候,存在大小端问题。
若CPU访问的是字符串,则不存在大小端问题。

X86/X86-64/ARM:存储方式为小端存储
powerpc/mips/ARM作为路由器时:大端存储

处理方法,通过4个函数实现主机字节序和网络字节序的相互转换
#include <arpa/inet.h>

1. uint32_t htonl(uint32_t hostlong);		//把uint32_t类型从主机序转换到网络序
2. uint16_t htons(uint16_t hostshort);		//把uint16_t类型从主机序转换到网络序
3. uint32_t ntohl(uint32_t netlong);		//把uint32_t类型从网络序转换到主机序
4. uint16_t ntohs(uint16_t netshort);		//把uint16_t类型从网络序转换到主机序

一些延申,四个函数使用范例,64位数据没有API可以直接调用的处置方法:
https://blog.csdn.net/K346K346/article/details/79053136