SocketServer和socket通信

时间:2017-07-18 04:19:26

标签: java sockets network-programming serversocket

我有一个关于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?

1 个答案:

答案 0 :(得分:1)

评论太长了

您的主机在通过路由器与Internet隔离的本地网络上运行,很可能由您的ISP提供。您的主机的实际IP地址可能类似于192.168.x.x,它是本地私有地址,无法从Internet访问。传出数据包和传入回复受NAT(网络地址转换)的约束。

whatismyip.com返回路由器连接到Internet的IP地址,路由器的防火墙会阻止所有传入流量。如果您希望这样做,以便Internet上某处的主机可以连接到您的服务器,则需要打开 路由器的 防火墙上的端口,并将路由器配置为将传入流量转发给主机。您可能还需要在主机上配置防火墙以允许来自路由器的传入流量。

解释所有这些都是StackOverflow的主题,因为它是基本网络的教程;它可能属于ServerFault,但也可能偏离主题,因为“太宽泛”。

听起来你需要学习基本的网络概念,包括路由,IP地址格式,防火墙,NAT和端口转发。