SocketServer与套接字通信
SocketServer and socket communication
我对 java 中的 SocketServer 和 Socket 连接有疑问,关于何时使用 localhost 以外的主机。
我正在尝试编写一个简单的聊天程序,我希望让我家里的其他人连接到它。这是我创建套接字服务器和套接字的代码:
服务器部分:
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,其他电脑在创建socket时是否也使用114.89.XX.XXX ip?
评论太长
您的主机 运行 位于本地网络中,该网络通过路由器与 Internet 隔离,很可能是由您的 ISP 提供的。您的主机的实际 IP 地址可能类似于 192.168.x.x
,这是一个本地私有地址,无法从 Internet 访问。传出数据包和传入回复受 NAT(网络地址转换)约束。
whatismyip.com
returns 您的 路由器 连接到 Internet 的 IP 地址,您的路由器的防火墙会阻止所有传入流量。如果你想让它工作以便 Internet 上某处的主机可以连接到你的服务器,你需要在 路由器的 防火墙上打开端口并将路由器配置为将传入流量转发到您的主机。可能您还需要在主机上配置防火墙以允许来自路由器的传入流量。
解释所有这些对于 Whosebug 来说是题外话,因为它是基础网络教程;它可能属于 ServerFault,但也可能是题外话,如 "too broad".
听起来您需要学习基本的网络概念,包括路由、IP 地址格式、防火墙、NAT 和端口转发。
我对 java 中的 SocketServer 和 Socket 连接有疑问,关于何时使用 localhost 以外的主机。
我正在尝试编写一个简单的聊天程序,我希望让我家里的其他人连接到它。这是我创建套接字服务器和套接字的代码:
服务器部分:
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,其他电脑在创建socket时是否也使用114.89.XX.XXX ip?
评论太长
您的主机 运行 位于本地网络中,该网络通过路由器与 Internet 隔离,很可能是由您的 ISP 提供的。您的主机的实际 IP 地址可能类似于 192.168.x.x
,这是一个本地私有地址,无法从 Internet 访问。传出数据包和传入回复受 NAT(网络地址转换)约束。
whatismyip.com
returns 您的 路由器 连接到 Internet 的 IP 地址,您的路由器的防火墙会阻止所有传入流量。如果你想让它工作以便 Internet 上某处的主机可以连接到你的服务器,你需要在 路由器的 防火墙上打开端口并将路由器配置为将传入流量转发到您的主机。可能您还需要在主机上配置防火墙以允许来自路由器的传入流量。
解释所有这些对于 Whosebug 来说是题外话,因为它是基础网络教程;它可能属于 ServerFault,但也可能是题外话,如 "too broad".
听起来您需要学习基本的网络概念,包括路由、IP 地址格式、防火墙、NAT 和端口转发。