我有一个关于java中SocketServer和Socket连接的问题,关于何时使用localhost以外的主机。
我正在尝试编写一个简单的聊天程序,我希望能让我家里的其他人连接到它。这是我创建socketserver和socket的代码:
服务器部分:
try{
ServerSocket socket=new ServerSocket(4444);
while(true){
Socket socket1=socket.accept();
new ClientThread(socket1);
}
客户端部分:
socket=new Socket("localhost",4444);
要测试我的程序,我在计算机上打开两个命令提示,一个用于服务器,一个用于客户端。当我使用localhost作为主机时,一切正常。同样,当我使用在ipconfig下找到的IPv4地址时,它也可以正常工作。
但是,当我尝试使用whatsmyip作为主机的地址时。例如:
socket=new Socket("114.89.XX.XXX",4444);
我没有连接,最后连接超时错误。
所以我的问题是:我应该如何使用114.89.XX.XXX ip?另外,如果我想让其他计算机连接到这个SocketServer,其他计算机是否也应该在创建套接字时使用114.89.XX.XXX ip?
答案 0 :(得分:1)
评论太长了
您的主机在通过路由器与Internet隔离的本地网络上运行,很可能由您的ISP提供。您的主机的实际IP地址可能类似于192.168.x.x
,它是本地私有地址,无法从Internet访问。传出数据包和传入回复受NAT(网络地址转换)的约束。
whatismyip.com
返回路由器连接到Internet的IP地址,路由器的防火墙会阻止所有传入流量。如果您希望这样做,以便Internet上某处的主机可以连接到您的服务器,则需要打开 路由器的 防火墙上的端口,并将路由器配置为将传入流量转发给主机。您可能还需要在主机上配置防火墙以允许来自路由器的传入流量。
解释所有这些都是StackOverflow的主题,因为它是基本网络的教程;它可能属于ServerFault,但也可能偏离主题,因为“太宽泛”。
听起来你需要学习基本的网络概念,包括路由,IP地址格式,防火墙,NAT和端口转发。