完成套接字Hello World

This commit is contained in:
riba2534
2019-01-12 10:36:36 +08:00
parent c98c620845
commit a88da474aa
3 changed files with 47 additions and 4 deletions

View File

@@ -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 中需要调用特殊的数据传输相关函数。

View File

View File

@@ -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));