繁体   English   中英

SocketServer和套接字通信

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM