完成第一章 理解网络编程和套接字

This commit is contained in:
riba2534
2019-01-12 13:04:57 +08:00
parent a4c664a7c8
commit 1e93eea1d6
2 changed files with 104 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
# 《TCP/IP网络编程》学习笔记
此仓库是我的《TCP/IP网络编程》学习笔记及具体代码实现代码部分请参考本仓库对应章节文件夹下的代码。
:flags:此仓库是我的《TCP/IP网络编程》学习笔记及具体代码实现代码部分请参考本仓库对应章节文件夹下的代码。
我的环境是Ubuntu18.04 LTS
@@ -10,6 +10,8 @@
## 第一章:理解网络编程和套接字
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
### 1.1 理解网络编程和套接字
#### 1.1.1构建打电话套接字
@@ -235,3 +237,82 @@ file data: Let's go!
关于文件描述符的 I/O 操作到此结束,要明白,这些内容同样适合于套接字。
#### 1.2.6 文件描述符与套接字
下面将同时创建文件和套接字,并用整数型态比较返回的文件描述符的值.
代码见:[fd_seri.c](ch01/fd_seri.c)
**编译运行**
```shell
gcc fd_seri.c -o fds
./fds
```
**输出结果**:
```
file descriptor 1: 3
file descriptor 2: 15
file descriptor 3: 16
```
### 1.3 基于 Windows 平台的实现
暂略
### 1.4 基于 Windows 的套接字相关函数及示例
暂略
### 1.5 习题
> :heavy_exclamation_mark:以下部分的答案,仅代表我个人观点,可能不是正确答案
1. 套接字在网络编程中的作用是什么?为何称它为套接字?
> 操作系统会提供「套接字」socket的部件套接字是网络数据传输用的软件设备。因此「网络编程」也叫「套接字编程」。「套接字」就是用来连接网络的工具。
2. 在服务器端创建套接字以后,会依次调用 listen 函数和 accept 函数。请比较二者作用。
> 答:调用 listen 函数将套接字转换成可受连接状态(监听),调用 accept 函数受理连接请求。如果在没有连接请求的情况下调用该函数,则不会返回,直到有连接请求为止。
3. Linux 中,对套接字数据进行 I/O 时可以直接使用文件 I/O 相关函数;而在 Windows 中则不可以。原因为何?
> 答:暂略。
4. 创建套接字后一般会给他分配地址,为什么?为了完成地址分配需要调用哪个函数?
> 套接字被创建之后只有为其分配了IP地址和端口号后客户端才能够通过IP地址及端口号与服务器端建立连接需要调用 bind 函数来完成地址分配。
5. Linux 中的文件描述符与 Windows 的句柄实际上非常类似。请以套接字为对象说明它们的含义。
> 答:暂略。
6. 底层 I/O 函数与 ANSI 标准定义的文件 I/O 函数有何区别?
> 答:文件 I/O 又称为低级磁盘 I/O遵循 POSIX 相关标准。任何兼容 POSIX 标准的操作系统上都支持文件I/O。标准 I/O 被称为高级磁盘 I/O遵循 ANSI C 相关标准。只要开发环境中有标准 I/O 库,标准 I/O 就可以使用。Linux 中使用的是 GLIBC它是标准C库的超集。不仅包含 ANSI C 中定义的函数,还包括 POSIX 标准中定义的函数。因此Linux 下既可以使用标准 I/O也可以使用文件 I/O
7. 参考本书给出的示例`low_open.c``low_read.c`,分别利用底层文件 I/O 和 ANSI 标准 I/O 编写文件复制程序。可任意指定复制程序的使用方法。
> 答:暂略。
## 第二章 套接字类型与协议设置
### 2.1 套接字协议及数据传输特性
## License
本仓库遵循 CC BY-NC-SA 4.0(署名 - 非商业性使用) 协议,转载请注明出处。
[![CC BY-NC-SA 4.0](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-nc-sa/4.0/)

22
ch01/fd_seri.c Normal file
View File

@@ -0,0 +1,22 @@
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
int main()
{
int fd1, fd2, fd3;
//创建一个文件和两个套接字
fd1 = socket(PF_INET, SOCK_STREAM, 0);
fd2 = open("test.dat", O_CREAT | O_WRONLY | O_TRUNC);
fd3 = socket(PF_INET, SOCK_DGRAM, 0);
//输出之前创建的文件描述符的整数值
printf("file descriptor 1: %d\n", fd1);
printf("file descriptor 2: %d\n", fd2);
printf("file descriptor 3: %d\n", fd3);
close(fd1);
close(fd2);
close(fd3);
return 0;
}