[英]SocketServer and socket communication
我对使用localhost以外的主机时有关Java中的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吗?
评论太久了
您的主机运行在通过路由器与Internet隔离的本地网络上,该网络很可能是由ISP提供的。 主机的实际IP地址可能类似于192.168.xx
,这是一个本地专用地址,无法从Internet访问。 传出数据包和传入回复均受NAT(网络地址转换)的约束。
whatismyip.com
返回路由器与Internet 的连接的IP地址,并且路由器的防火墙阻止所有传入的流量。 如果要使其正常工作,以便Internet上的主机可以连接到服务器,则需要打开路由器防火墙上的端口,还需要配置路由器以将传入流量转发到主机。 可能还需要在主机上配置防火墙,以允许来自路由器的传入流量。
对于StackOverflow而言,这一切都是离题的,因为它是基础网络中的教程。 它可能属于ServerFault ,但也可能不在主题之内,因为它“太宽泛”。
听起来您需要学习基本的网络概念,包括路由,IP地址格式,防火墙,NAT和端口转发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.