在理解代码前有几个函数先说一下:
1
2
3
4
5
6
7
8
9
10
<code>struct</code> <code>sockaddr_in {</code>
<code> </code><code>uint8_t sin_len; </code><code>//长度字段,这个sockaddr_in结构的长度,一般不用设置和检查它</code>
<code> </code><code>sa_family_t sin_family; </code><code>//协议族,tcp,udp等协议族就设置为af_inet </code>
<code> </code><code>in_port_t sin_port; </code><code>//端口号</code>
<code> </code>
<code> </code><code>struct</code> <code>in_addr sin_addr; </code><code>//32位的ipv4地址</code>
<code> </code><code>char</code> <code>sin_zero(8); </code><code>//未使用</code>
<code>}</code>
posix规范只需要指定其中的sin_family, sin_port, sin_addr三个字段
这个结构非常重要!!
参数解释:
family:协议族,和sockaddr_in中的sin_family一个意思
type: 指明套接字类型
protocol:通常赋值为0
这个函数是所有套接字编程的入口,创建套接字。
这个函数是将本地字节序列转换为网络字节序列,简单来说,就是将一个数的高低位互换
(如12 34 -> 3412)
这个函数在给servaddr_in赋值的时候会用到
下面这个程序包含了基本的io操作,说明以注释的形式加在代码中;
server的流程基本是这样的:

客户端的流程如下;