如何在Java中实例化Socket类?

时间:2010-02-20 19:45:22

标签: java networking constructor sockets instantiation

我知道可以用这种方式实例化Socket类(例如):

new Socket("taranis", 7);

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

1
。如果我的计算机没有形成本地网络但连接到Internet,我可以使用计算机的IP地址来实例化套接字吗?


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

P.S。我认为计算机可以自己建立一个网络(使用zeroconf)。谁然后给计算机命名,我怎么能提前知道这些名字(我需要他们写我的代码)。

2 个答案:

答案 0 :(得分:2)

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

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

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

  3. 对于编程,通常使用ipaddress(当名称可以动态分配给其中一台计算机时使用名称(使用动态DNS))。 IP地址也可以(并且通常)使用DHCP服务器动态分配。

答案 1 :(得分: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和端口。