天天看点

Linux IO模型漫谈(3) -- 阻塞式IO实现1 sockaddr_in 套接字地址结构2 socket函数(创建套接字)3 htons函数服务器端:客户端:

在理解代码前有几个函数先说一下:

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 -&gt; 3412)

这个函数在给servaddr_in赋值的时候会用到

下面这个程序包含了基本的io操作,说明以注释的形式加在代码中;

server的流程基本是这样的:

Linux IO模型漫谈(3) -- 阻塞式IO实现1 sockaddr_in 套接字地址结构2 socket函数(创建套接字)3 htons函数服务器端:客户端:

客户端的流程如下;

Linux IO模型漫谈(3) -- 阻塞式IO实现1 sockaddr_in 套接字地址结构2 socket函数(创建套接字)3 htons函数服务器端:客户端: