Unix网络编程-TCP客户端服务器示例(4)

一个简单的TCP客户端/服务器程序示例,这个简单的例子执行如下步骤的一个回射服务器:

1) 客户端从标准输入读入一行文本,并写给服务端

2) 服务端从网络输入读入一行文本,并回射给客户端

3) 客户端从网络输入读入这行回射的文件,并显示在标准输出上。

下图描述了这个简单的客户/服务器:

代码略,见上篇。

服务器主机崩溃后重启

这种情形种,我们先在客户与服务器之间建立连接,然后假设服务器主机崩溃并重启。前篇种,当我们发送数据时,服务器主机仍然处于崩溃状态。本次,我们将在发送数据前重启已经崩溃的服务器主机。模拟这种情况的简单方法是,先建立连接,在从网络上断开服务器主机,将他关机后再重新启动,最后把他重新连接到网络中。我们不想让客户知道服务器主机的关机。

所发生的步骤如下:

1) 我们启动服务端和客户端,并再客户端键入一行文本以确认连接已经建立。

2) 服务器主机崩溃并重启

3) 在客户端上键入一行文本,他将作为一个TCP数据分节发送到服务器主机

4) 当服务器主机崩溃后重启,他的TCP丢失了崩溃前的所有连接信息,因为服务器TCP对所收到的来自客户端的数据分节响应一个RST。

5) 当客户TCP收到该RST时,客户正阻塞于read调用,导致该调用返回ECONNRESET错误。

我用tcpdump抓取数据包后,用wireshark查看

你可能感兴趣的:(Unix网络编程-TCP客户端服务器示例(4))