Files
TCP-IP-NetworkNote/README.md
2019-01-11 16:14:44 +08:00

74 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 《TCP/IP网络编程》学习笔记
## 理解网络编程和套接字
### 电话套接字
以电话机打电话的方式来理解套接字。
**调用 socket 函数(安装电话机)时进行的对话**
> 问:接电话需要准备什么?
>
> 答:当然是电话机。
有了电话机才能安装电话,于是就要准备一个电话机,下面函数相当于电话机的套接字。
```c
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
//成功时返回文件描述符,失败时返回-1
```
**调用 bind 函数(分配电话号码)时进行的对话**
> 问:请问我的电话号码是多少
>
> 答我的电话号码是123-1234
套接字同样如此。就想给电话机分配电话号码一样利用以下函数给创建好的套接字分配地址信息IP地址和端口号
```c
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
//成功时返回0失败时返回-1
```
调用 bind 函数给套接字分配地址之后,就基本完成了所有的准备工作。接下来是需要连接电话线并等待来电。
**调用 listen 函数(连接电话线)时进行的对话**
> 问:已架设完电话机后是否只需链接电话线?
>
> 答:对,只需要连接就能接听电话。
一连接电话线,电话机就可以转换为可接听状态,这时其他人可以拨打电话请求连接到该机。同样,需要把套接字转化成可接受连接状态。
```c
#include <sys/socket.h>
int listen(int sockfd, int backlog);
//成功时返回0失败时返回-1
```
连接好电话线以后,如果有人拨打电话就响铃,拿起话筒才能接听电话。
**调用 accept 函数(拿起话筒)时进行的对话**
> 问:电话铃响了,我该怎么办?
>
> 答:接听啊。
```c
#include <sys/socket.h>
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
//成功时返回文件描述符,失败时返回-1
```
网络编程中和接受连接请求的套接字创建过程可整理如下:
1. 第一步:调用 socket 函数创建套接字。
2. 第二步:调用 bind 函数分配IP地址和端口号。
3. 第三步:调用 listen 函数转换为可接受请求状态。
4. 第四步:调用 accept 函数受理套接字请求。