2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。
第1章
1.1理解网络编程和套接字
网络编程又叫套接字编程。所谓网络编程,就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程? 我们平常将插头插入插座上就能从电网中获取电力,同样的道理,为了与远程计算机进行数据传输,需要连接到因特网,而编程中的“套接字”就是用来链接网络的工具。
服务器端创建的套接字又叫服务器端套接字或者监听套接字。 其请求连接的套接字创建过程分为四步:
- 调用socket函数创建套接字
- 调用bind函数分配IP地址和端口号
- 调用listen函数转为可接受请求状态
- 调用accept函数受理连接请求
请求连接的客户端套接字创建过程如下两步:
- 调用socket函数创建套接字
- 调用connect函数向服务器端发送连接请求
值得注意的是:创建完套接字,并不会马上区分为服务器端或客户端。 如果接下来紧接着调用bind、listen等函数则成为服务器端套接字;如果调用connect函数则称为客户端套接字。
接下来在linux环境中编译并执行上述两个实例:hello_server.c文件和hello_client.c文件。
分别对客户端和服务端程序进行编译:
gcc hello_server.c -o hserver
gcc hello_client.c -o hclient
该命令中的-o是用来指定可执行文件名的可选参数,因此,编译后将生成可执行文件hserver和hclient。
运行:
./hserver 9190
./hclient 127.0.0.1 9190
运行的时候,首先在 9190 端口启动服务,然后 heserver 就会一直等待客户端进行响应,当客户端监听位于本地的 IP 为 127.0.0.1 的地址的9190端口时,客户端就会收到服务端的回应,输出`Hello World!`。
ps:执行过程中输入的127.0.0.1是本地计算机的IP地址。 如果在同一台计算机中同时运行服务器端和客户端,将采用这种连接方式。 但如果服务器端和客户端在不同计算机中运行,则应采用服务器端所在计算机的IP地址。