EchoPlayer类的echo(String msg)方法负责生成响应结果。如果需要把生成响应结果的功能(即echo(String msg)方法)移动到一个远程主机上,那么上面的EchoPlayer类无法满足这一需求。在这种情况下,要创建两个程序:客户程序EchoClient和服务器程序EchoServer。EchoClient程序有两个作用:与用户交互,从本地控制台获得标准输入流和标准输出流。与远程的EchoServer通信,向EchoServer发送用户输入的字符串,接收EchoServer返回的响应结果,再把响应结果写到标准输出流。
EchoServer程序负责接收EchoClient发送的字符串,然后把响应结果发送给EchoClient。图2演示了EchoClient与EchoServer的通信过程。客户机和远程服务器是通过网络连接的两台主机,客户机上运行EchoClient进程,远程服务器上运行EchoServer进程。

图2 EchoClient与EchoServer通信
张三给李四打电话,两者顺利通话的前提条件是他们各自的电话机都连接到了电话网络上。张三和李四只需关注他们谈话的具体内容,而不必考虑如何把自己的话音传输到对方的电话机上。传输语音信息的任务是由电话网络来完成的。
同样,两个进程顺利通信的前提条件是它们所在的主机都连接到了计算机网络上。EchoClient与EchoServer只需关注它们通信的具体内容,例如EchoClient发送信息“hello”,那么EchoServer返回信息“echo:hello”。EchoClient和EchoServer都无需考虑如何把信息传输给对方。传输信息的任务是由计算机网络来完成的。
Java开发人员的任务是编写EchoClient和EchoServer程序,接下来在两台安装了JDK的主机上分别运行它们,两个进程就会有条不紊地通信。
由于进程通信建立在计算机网络的基础上,Java开发人员有必要对计算机网络有基本的了解,这有助于更容易地掌握Java网络编程技术。
二、计算机网络
计算机网络是现代通信技术与计算机技术相结合的产物。所谓计算机网络,是指把分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统。在计算机网络上,众多计算机可以方便地互相通信、共享硬件、软件和数据信息等资源。通俗地说,计算机网络就是通过电缆、电话线、或无线通信设施等互联的计算机的集合。
|