我学习套接字编程,书中的例子显示:
// 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();
}
}
我的问题是,在行新套接字(“localhost”,1254),为什么地址是本地主机,而不是服务器的IP地址?
发布于 2016-02-28 01:04:40
对于这个特定的程序,很难确切地说明原因。通常的原因是服务器甚至可能没有另一个IP地址。如果它是本地的,那么即使您根本没有NIC,也可以通过"localhost"
或"127.0.0.1"
访问它。
另一个可能的原因是安全。您的计算机可能有多个NIC,但服务器可能被配置为只侦听环回接口,因此只接受本地连接。如果它根本不打算用于外部,这通常是最好的做法,因为潜在的攻击者将有一个非常困难的连接通过一个接口,它甚至没有侦听!他们必须先以其他方式进入系统。
发布于 2016-02-27 17:21:45
您可以使用服务器名而不是"localhost“。
Socket client =新套接字(serverName,端口);
发布于 2016-02-27 18:01:27
除非服务器和客户端在同一台主机上运行,否则不能使用localhost
。
如果它们确实运行在同一台主机上,则客户端应该使用的IP或主机名取决于服务器进程使用的是什么。如果要使服务器进程可用于网络,则通常将其设置为侦听所有网络接口上的连接。在这种情况下,客户机使用本地主机或外部IP地址并不重要,它可以以任何方式连接到服务器。
如果不希望其他主机能够访问服务器进程,则可以使其仅使用回送接口。这样,只有本地运行的客户端才能连接,他们唯一能做到的方法是使用localhost
或回送IP地址。
https://stackoverflow.com/questions/35677503
复制相似问题