java如何创建没有本地主机地址的ServerSocket对象
各位,我在这里创建一个简单服务器的代码与本地主机地址(127.0.0.1)配合得很好。这是我的密码
import java.io.*;
import java.net.*;
public class Main {
public static void main(String[] args)
{
Zig z = new Zig();
z.start();
}
}
class Zig
{
ServerSocket ss = null;
InetAddress ia = null;
Socket s = null;
private static final int prt = 56540;
Zig()
{
try
{
byte[] addr = {127,0,0,1};
ia = InetAddress.getByAddress(addr);
SocketAddress sa = new InetSocketAddress(ia,prt);
ss = new ServerSocket();
ss.bind(sa);
s = ss.accept();
}
catch (IOException e)
{
e.printStackTrace();
}
}
Zig start()
{
try
{
InputStream i = s.getInputStream();
InputStreamReader isr = new InputStreamReader(i);
BufferedReader br = new BufferedReader(isr);
String str = null;
while (str != "stp")
{
str = br.readLine();
System.out.println(str);
}
br.close();
isr.close();
i.close();
s.close();
ss.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return this;
}
}
我的问题是,如何使用路由器的IP-192.168.8.1而不是127.0.0.1?我还尝试了来自http://whatsmyip.org的IP地址,但仍然出现了以下异常:
java.net.BindException: Cannot assign requested address: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.bind(ServerSocket.java:329)
at Zig.<init>(Main.java:26)
at Main.main(Main.java:8)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Exception in thread "main" java.lang.NullPointerException
at Zig.start(Main.java:38)
at Main.main(Main.java:9)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
我想创建一个简单的服务器,我可以远程访问与另一台计算机都有互联网连接。 或者有没有一种方法可以让两台计算机通过互联网进行通信
问候
# 1 楼答案
如果您希望两台设备通过LAN(本地网络)通信,可以使用路由器分配给这些设备的地址(这是您提到的192.168.8.X地址。编辑:正如Prabhu提到的,使用设备IP地址,而不是路由器IP地址!您通常可以在路由器管理界面中找到路由器分配给连接设备的IP)。记住,路由器将来可能会为同一设备分配不同的地址。大多数路由器都有一个功能,总是将相同的IP分配给特定的设备。此外,出于安全原因,一些路由器会阻止本地设备之间(即有线和WiFi设备之间)的通信。查看路由器的配置以了解更多信息和配置选项
如果你想让你的设备通过互联网连接,你必须使用你的路由器的全球IP地址(这可能就是你用whatsmyip找到的地址)
此外,出于安全原因,路由器通常只会阻止来自internet的传入请求。同样,您的路由器可能有一个名为端口转发的功能,它允许您将请求重定向到本地网络中的特定设备(以及该设备上的特定端口)。小心使用,因为这会打开路由器内置安全机制的一部分
最后,根据您的提供商,您可能有一个与其他客户共享的IPv4地址(请参见Wikipedia)(所谓的DS Lite(Wiki))。在这种情况下,您的网络根本无法从IPv4 internet访问,您唯一的机会就是使用IPv6协议(如果可用)
希望有帮助