正常启动

尽管我们的TCP程序例子很小

2个main函数加上str_echo、str_cli、readline、writen

然而对于我们弄清客户和服务器如何启动,如何终止,更为重要的是当发生某些错误时将会发生什么

(例如:客户主机崩溃,客户进程崩溃,网页连接断开,等等)

只有搞清楚这些边界条件以及它们与TCP/IP协议的相互作用

我们才能够写出能够处理这些情况的健壮的客户和服务器程序

首先我们在主机linux上后台启动服务器

服务器启动后,它调用socket、bind、accept,并阻塞于accept调用(我们还没有启动客户)

在启动客户之前,我们运行netstat程序来检查服务器监听套接字的状态

一个套接字处于LISTENT状态,它有通配的本地IP地址,本地端口9877

netstat用“*”来表示一个为0的IP地址或为0的端口号

我们接着在同一个主机上启动客户,并指定服务器主机的IP地址为127.0.0.1(环回地址)

当然我们也可以指定该地址为该主机的普通IP地址

客户调用socket和connect,后者引起TCP三次握手过程。当握手完成后,客户中的connect和服务器中的accept均返回,连接于是建立。

接着:

1)客户调用str_cli函数,该函数将阻塞于fgets调用,因为我们还没有键入一行文本

2)当服务器中的accept返回时,服务器调用fork,再由子进程调用str_echo。该函数调用readline,readline再调用read,而read在等待客户送入一行文本期间阻塞

3)另一方面,服务器父进程再次调用accept并阻塞,等待下一个客户连接

至此,我们有3个都在睡眠的进程:客户进程、服务器父进程、服务器子进程

========================if i have some wrong, please give me a message, thx.========================
原文地址:https://www.cnblogs.com/ailx10/p/5352787.html