为什么客户端套接字将localhost作为参数?

时间:2016-02-28 01:10:38

标签: java sockets tcp

我研究套接字编程,书中的例子显示:

// SimpleClient.java: A simple client program.
import java.net.*;
import java.io.*;
public class SimpleClient {
  public static void main(String args[]) throws IOException {
    // Open your connection to a server, at port 1254
    Socket s1 = new Socket(“localhost”,1254);
    // Get an input file handle from the socket and read the input
    InputStream s1In = s1.getInputStream();
    DataInputStream dis = new DataInputStream(s1In);
    String st = new String (dis.readUTF());
    System.out.println(st);
    // When done, just close the connection and exit
    dis.close();
    s1In.close();
    s1.close();
  }
}

我的问题是,在新的Socket(“localhost”,1254),为什么地址是localhost而不是服务器的IP地址?

3 个答案:

答案 0 :(得分:0)

对于这个特定的程序,很难确切地说为什么。通常的原因是因为服务器甚至可能没有其他IP地址。如果它是本地的,那么即使您根本没有网卡,也可以通过"localhost""127.0.0.1"访问它。

另一个可能的原因是安全性。您的计算机可能有多个NIC,但服务器可能配置为仅侦听环回接口,因此只接受本地连接。如果它根本不打算用于外部使用,这通常是最好的办法,因为潜在的攻击者将很难通过它甚至不能收听的界面连接它!他们必须首先使用其他方式进入系统。

答案 1 :(得分:-1)

您可以使用服务器名称而不是“localhost”

Socket client = new Socket(serverName,port);

答案 2 :(得分:-2)

除非服务器和客户端在同一主机上运行,​​否则不能使用localhost

如果它们确实在同一主机上运行,​​则客户端应使用的IP或主机名取决于服务器进程使用的内容。如果要使服务器进程可用于网络,通常将其设置为侦听所有网络接口上的连接。在这种情况下,如果客户端使用localhost或外部IP地址无关紧要,它可以以任何方式连接到服务器。

如果您不希望其他主机能够访问服务器进程,则可以仅使用环回接口。这样只有本地运行的客户端才能连接,唯一可行的方法是使用localhost或环回IP地址。