2010-02-20 24 views
2

我知道Socket类可以通过这种方式来实例化(作为一个例子):如何在Java中实例化一个Socket类?

new Socket("taranis", 7); 

其中“lucid中的”是在本地网络中的服务器的名称。在这方面,我有两个问题:


1.如果我的电脑没有形成本地网络但连接到互联网,我可以使用计算机的IP地址实例化一个套接字吗?


2.我的电脑如何在本地网络中获取名称?我在创建网络时是否给电脑命名?

P.S.我决定让电脑自己建立一个网络(使用zeroconf)。然后谁给电脑命名,我怎么能提前知道这些名字(我需要他们写我的代码)。

回答

2
  1. 是的,你可以创建一个使用IP地址的插槽,你可以这样做是这样的:new Socket("192.168.1.00",8888)

  2. 当您在计算机上安装的操作系统,通常的步骤之一,该操作系统品牌你经历的是给你的机器一个名字。每个操作系统在安装后还可以更改这些名称。所以,你的电脑中的每个人可能都有一个名字。然而,棘手的部分是让一台机器知道另一台机器的名称。这可以通过几种方式完成。一种是通过使用DNS server。这种类似中间人的名字(即Computer1)将其转换为其IP地址(192.1.168.1.100)。你也可以在本地保存这些映射,你可以把它放在hosts文件中。这是名称和IP地址之间的映射关系,如果您使用此方法,则需要确保这些主机文件跨机器排列。

  3. Zeroconf是一个有趣的协议。它的工作方式是一台计算机创建一个命名服务,第二台计算机只是按名称查找服务,一旦找到可以连接的服务。当服务被发现时,连接客户端并且可以查询要连接的IP和端口。

2

在套接字编程之前,您需要一些网络背景知识。不幸的是,您提出的问题不容易回答,因为这取决于您拥有的特定网络配置。这里有一些简短的答案,但由于依赖于特定的配置可能不正确。您将更好地阅读TCP/IP,例如here

  1. 是的。但我怀疑你的电脑没有形成本地网络(LAN)。如果他们这样做,你可以使用他们的局域网IP地址。要查找ipaddress,可以在Windows上的“命令提示符”和unix上的“ifconfig”上使用“ipconfig”命令。输出是计算机中每个网络接口的配置。

  2. 是的,您可以配置计算机上每台计算机的名称。

编程时,通常你会使用ip地址(使用名称时,名称可以动态地分配给一台计算机(使用动态DNS))。 IP地址也可以(并且通常)使用DHCP服务器动态分配。

+0

我正确理解了吗?计算机可以同时位于本地网络和Internet中。而且电脑可以有两个IP地址?一个是局域网IP地址,另一个是来自互联网? – Roman 2010-02-20 20:44:31

+0

@罗曼是的。如果你连接到局域网,你的局域网IP通常是192.168.blah.blah。您的外部IP地址(可能)会有所不同,例如231.144.15.128。您的调制解调器使用该调制解调器与互联网上的电脑互动。 – 2011-10-21 09:48:44