2012-03-26 84 views
0

我用Java创建了一个简单的echo服务器。当我在本地尝试时,它应该可以正常工作。但是,当我尝试使用服务器运行的IP地址和端口号从另一台计算机连接它时,它永远不会连接。从另一台计算机连接到服务器还有其他事情吗?如何连接到运行Java服务器的其他计算机?

import java.net.Socket; 
import java.net.ServerSocket; 

public class EchoServer { 

    public static void main(String[] args) throws Exception { 

     // create socket 
     int port = 4444; 
     ServerSocket serverSocket = new ServerSocket(port); 
     System.err.println("Started server on port " + port); 

     // repeatedly wait for connections, and process 
     while (true) { 

      // a "blocking" call which waits until a connection is requested 
      Socket clientSocket = serverSocket.accept(); 
      System.err.println("Accepted connection from client"); 

      // open up IO streams 
      In in = new In (clientSocket); 
      Out out = new Out(clientSocket); 

      // waits for data and reads it in until connection dies 
      // readLine() blocks until the server receives a new line from client 
      String s; 
      while ((s = in.readLine()) != null) { 
       out.println(s); 
      } 

      // close IO streams, then socket 
      System.err.println("Closing connection with client"); 
      out.close(); 
      in.close(); 
      clientSocket.close(); 
     } 
    } 
} 
+1

也许防火墙阻止了你的连接。尝试禁用它进行简短的测试。你是否通过路由器与另一台计算机分开? – Tudor 2012-03-26 20:48:49

+2

添加代码如何创建服务器套接字? – 2012-03-26 20:49:16

+0

调用'netstat -na'并检查您绑定服务器的地址。它应该是0.0.0.0:*(或者::: *对于ipv6) – 2012-03-26 20:51:39

回答

0

如果这是你的局域网上通过名称引用(计算机的实际名称运行你EchoServer的机器,我相信他们告诉你做这样的太阳教程,张贴了这个回声服务器锻炼; Tibial是否正确? )。如果可行,这对解决问题将有很大帮助。

1

请检查以下事项。

  1. 服务器计算机是否位于网络代理之后?

  2. 它有一个独立的公共IP地址,通过它可以从任何地方从 访问?或者,它是否有内部IP,通过它可以在您的局域网中访问?

  3. 确保FireWalls对于端口4444有例外情况。或者您可以在客户端和服务器上关闭它。

如果没有帮助,请发布例外(通过编辑问题)。或者服务器程序正在冻结而没有任何错误?

+0

我相信防火墙已关闭。我如何检查前两个? – ipman 2012-03-26 21:23:15

+0

从这两台电脑打开http://ipchicken.com/。如果两个IP相同,则位于网络代理的后面,而您的计算机没有单独的公共IP。 – tusar 2012-03-26 21:27:25

相关问题