在了解代碼前有幾個函數先說一下:
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的流程基本是這樣的:
用戶端的流程如下;