Java套接字在Windows上不起作用

时间:2013-09-05 14:58:00

标签: java windows sockets

我正在尝试创建一个程序,我想在同一个wifi中连接两个设备,所以我正在尝试使用套接字。

我在Android设备上的PC和客户端运行服务器代码。 问题是服务器不能在Windows上运行,但它在linux上运行。 我断开了所有的防火墙,Windows和avast,但我仍然有同样的问题。 我试图使用Linux机器作为服务器和Windows作为客户端,它的工作完美。

当我尝试获取Socket“Socket s = ss.accept();”时,我放了一些打印件以查看它停止的位置以及Windows中的服务器端是否停止。我没有得到任何错误它只是卡在那里。

我不知道会出现什么问题。

服务器端

   int port = 2002;  
   try {  
            ServerSocket ss = new ServerSocket(port);

            Socket s = ss.accept();

            InputStream is = s.getInputStream();  
            ObjectInputStream ois = new ObjectInputStream(is); 

            System.out.println((String)ois.readObject());  
            is.close();  
            s.close();  
            ss.close();  
   }catch(Exception e){System.out.println(e);}  

客户方:

try{  
            String hostPortatil = "192.168.1.131";
            String host = "192.168.174.1";
            int port = 2002;
            Socket s = new Socket(hostPortatil, port);  

            OutputStream os = s.getOutputStream();

            ObjectOutputStream oos = new ObjectOutputStream(os);  

            oos.writeObject(new String("another object from the client"));  

            oos.close();  
            os.close();  
            s.close();  
}catch(Exception e){
            System.out.println(e);
}

4 个答案:

答案 0 :(得分:0)

很可能您尚未将Windows防火墙配置为接受端口2002上的连接。

答案 1 :(得分:0)

您的服务器配置为侦听端口9999上的连接,但客户端使用端口2002进行连接

编辑:

在Windows上启动服务器并打开cmd.exe:

netstat -an|findstr "2002"

你应该看到你的java进程正在监听连接。如果没有,则出现问题。在linux服务器上打开一个shell:

telnet 192.168.1.131 2002

您应该从linux服务器连接到Windows服务器。如果不是,有些人就错了。

答案 2 :(得分:0)

我认为这是因为您正在Windows上运行程序的服务器端,这会将localhost ip分配给服务器端,并且该ip与本地Wi-Fi和热点连接的ip肯定不同。 我在Windows上使用localhost运行示例应用程序的客户端和服务器端,并且可以运行,但无法在两个不同平台上使用我的Wi-Fi和热点连接的IP。 我想通过将计算机转到服务器可以解决此问题!

答案 3 :(得分:0)

accept()方法正在等待客户端建立TCP连接,这就是为什么没有输出且没有错误的原因,因此问题似乎出在客户端。