返回介绍

15.1.1 服务器和客户机

发布于 2024-10-15 23:56:33 字数 1325 浏览 0 评论 0 收藏 0

网络最基本的精神就是让两台机器连接到一起,并相互“交谈”或者“沟通”。一旦两台机器都发现了对方,就可以展开一次令人愉快的双向对话。但它们怎样才能“发现”对方呢?这就象在游乐园里那样:一台机器不得不停留在一个地方,侦听其他机器说:“嘿,你在哪里呢?”

“停留在一个地方”的机器叫作“服务器”(Server);到处“找人”的机器则叫作“客户机”(Client)或者“客户”。它们之间的区别只有在客户机试图同服务器连接的时候才显得非常明显。一旦连通,就变成了一种双向通信,谁来扮演服务器或者客户机便显得不那么重要了。

所以服务器的主要任务是侦听建立连接的请求,这是由我们创建的特定服务器对象完成的。而客户机的任务是试着与一台服务器建立连接,这是由我们创建的特定客户机对象完成的。一旦连接建好,那么无论在服务器端还是客户机端,连接只是魔术般地变成了一个 IO 数据流对象。从这时开始,我们可以象读写一个普通的文件那样对待连接。所以一旦建好连接,我们只需象第 10 章那样使用自己熟悉的 IO 命令即可。这正是 Java 连网最方便的一个地方。

1. 在没有网络的前提下测试程序

由于多种潜在的原因,我们可能没有一台客户机、服务器以及一个网络来测试自己做好的程序。我们也许是在一个课堂环境中进行练习,或者写出的是一个不十分可靠的网络应用,还能拿到网络上去。IP 的设计者注意到了这个问题,并建立了一个特殊的地址——localhost——来满足非网络环境中的测试要求。在 Java 中产生这个地址最一般的做法是:

InetAddress addr = InetAddress.getByName(null);

如果向 getByName() 传递一个 null(空)值,就默认为使用 localhost。我们用 InetAddress 对特定的机器进行索引,而且必须在进行进一步的操作之前得到这个 InetAddress(互联网地址)。我们不可以操纵一个 InetAddress 的内容(但可把它打印出来,就象下一个例子要演示的那样)。创建 InetAddress 的唯一途径就是那个类的 static(静态)成员方法 getByName()(这是最常用的)、getAllByName() 或者 getLocalHost()。

为得到本地主机地址,亦可向其直接传递字串"localhost":

InetAddress.getByName("localhost");

或者使用它的保留 IP 地址(四点形式),就象下面这样:

InetAddress.getByName("127.0.0.1");

这三种方法得到的结果是一样的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文