我正在尝试创建一个程序,我想在同一个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);
}
答案 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连接,这就是为什么没有输出且没有错误的原因,因此问题似乎出在客户端。