From a88da474aa12bf93e252e48ae77b7eee389d70be Mon Sep 17 00:00:00 2001 From: riba2534 Date: Sat, 12 Jan 2019 10:36:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=A5=97=E6=8E=A5=E5=AD=97He?= =?UTF-8?q?llo=20World?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 47 +++++++++++++++++++++++++++++++++++++++++++-- ch01/README.md | 0 ch01/hello_server.c | 4 ++-- 3 files changed, 47 insertions(+), 4 deletions(-) delete mode 100644 ch01/README.md diff --git a/README.md b/README.md index 7d616f2..07cf785 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ # 《TCP/IP网络编程》学习笔记 -## 理解网络编程和套接字 +此仓库是我的《TCP/IP网络编程》学习笔记及具体代码实现,代码部分请参考本仓库对应章节文件夹下的代码。 -### 电话套接字 +## 第一章:理解网络编程和套接字 + +### 1.1 理解网络编程和套接字 + +#### 1.1.1构建打电话套接字 以电话机打电话的方式来理解套接字。 @@ -71,3 +75,42 @@ int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen); 3. 第三步:调用 listen 函数转换为可接受请求状态。 4. 第四步:调用 accept 函数受理套接字请求。 +#### 1.1.2 编写`Hello World`套接字程序 + +**服务端**: + +服务器端(server)是能够受理连接请求的程序。下面构建服务端以验证之前提到的函数调用过程,该服务器端收到连接请求后向请求者返回`Hello World!`答复。除各种函数的调用顺序外,我们还未涉及任何实际编程。因此,阅读代码时请重点关注套接字相关的函数调用过程,不必理解全过程。 + +服务器端代码请参见:[hello_server.c](ch01/hello_server.c) + +**客户端**: + +客户端程序只有`调用 socket 函数创建套接字` 和 `调用 connect 函数向服务端发送连接请求`这两个步骤,下面给出客户端,需要查看以下两方面的内容: + +1. 调用 socket 函数 和 connect 函数 +2. 与服务端共同运行以收发字符串数据 + +客户端代码请参见:[hello_client.c](ch01/hello_client.c) + +**编译**: + +分别对客户端和服务端程序进行编译: + +```shell +gcc hello_server.c -o hserver +gcc hello_client.c -o hclient +``` + +**运行**: + +```shell +./hserver 9190 +./hclient 127.0.0.1 9190 +``` + +运行的时候,首先再 9190 端口启动服务,然后 heserver 就会一直等待客户端进行响应,当客户端监听位于本地的 IP 为 127.0.0.1 的地址的9190端口时,客户端就会收到服务端的回应,输出`Hello World!` + +### 1.2 基于 Linux 的文件操作 + +讨论套接字的过程中突然谈及文件也许有些奇怪。但是对于 Linux 而言,socket 操作与文件操作没有区别,因而有必要详细了解文件。在 Linux 世界里,socket 也被认为是文件的一种,因此在网络数据传输过程中自然可以使用 I/O 的相关函数。Windows 与 Linux 不同,是要区分 socket 和文件的。因此在 Windows 中需要调用特殊的数据传输相关函数。 + diff --git a/ch01/README.md b/ch01/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/ch01/hello_server.c b/ch01/hello_server.c index 4c4eb45..04e32b4 100644 --- a/ch01/hello_server.c +++ b/ch01/hello_server.c @@ -23,8 +23,8 @@ int main(int argc, char *argv[]) exit(1); } //调用 socket 函数创建套接字 - serv_sock = socket(PF_INET, SOCK_STREAM, 0); //调用socket函数创建套接字 - if (serv_sock != -1) + serv_sock = socket(PF_INET, SOCK_STREAM, 0); + if (serv_sock == -1) error_handling("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr));