我研究套接字编程,书中的例子显示:
// 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地址?
答案 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地址。