Java套接字不';我不能在windows上工作
我正在尝试制作一个程序,我想在同一个wifi中连接两台设备,所以我尝试使用插座 我在我的pc上运行服务器代码,在android设备上运行客户端代码。 问题是服务器在windows上不工作,但在linux上工作。 我断开了所有防火墙、windows和avast的连接,但仍然存在相同的问题。 我曾尝试使用linux机器作为服务器,windows作为客户端,它工作得非常好 当我尝试获取套接字“Socket s=ss.accept();”时,我打印了一些图片以查看它停止的位置,windows中的服务器端也停止了。我没有收到任何错误,只是卡在那里了 我不知道会出什么问题 服务器端Java套接字不';我不能在windows上工作,java,windows,sockets,Java,Windows,Sockets,我正在尝试制作一个程序,我想在同一个wifi中连接两台设备,所以我尝试使用插座 我在我的pc上运行服务器代码,在android设备上运行客户端代码。 问题是服务器在windows上不工作,但在linux上工作。 我断开了所有防火墙、windows和avast的连接,但仍然存在相同的问题。 我曾尝试使用linux机器作为服务器,windows作为客户端,它工作得非常好 当我尝试获取套接字“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);
}
很可能您尚未将Windows防火墙配置为接受端口2002上的连接。您的服务器配置为侦听端口9999上的连接,但客户端使用端口2002进行连接 编辑: 在windows上启动服务器并打开cmd.exe:
netstat -an|findstr "2002"
您应该看到您的java进程正在侦听连接。如果没有,那就有问题了。在linux服务器中打开一个shell:
telnet 192.168.1.131 2002
您应该从linux服务器连接到windows服务器。同样,如果没有错误的话,也有一些是错误的。我认为这是因为您在Windows上运行程序的服务器端,该程序将本地主机ip分配给服务器端,并且该ip肯定不同于本地Wi-Fi和热点连接的ip。 我使用localhost在Windows上运行示例应用程序的客户端和服务器端,在两个不同的平台上使用Wi-Fi和hotspot连接的ip进行了工作,但没有工作。
我想把电脑换成服务器就可以解决这个问题了 accept()方法正在等待客户端建立TCP连接,这就是没有输出也没有错误的原因,因此问题似乎出在客户端。“不工作”?它会崩溃吗?如果没有,会发生什么?我非常肯定Java套接字在windows上可以工作;)你是否检查过你是否拥有Android中所需的所有权限?你是否连接到正确的端口。我看到客户端试图连接到端口2002,而服务器监听9999。否则,我在代码中看不到任何错误。@Fildor我不认为他声称Java套接字在windows中被破坏了。他说这对他的案子不起作用,他不明白为什么。但是,我同意,在这里,我会先把矛头指向客户端,然后再指向服务器。嘿,对不起,解释得不太好。我复制代码时出错,两者都连接到端口2002。我的观点是,使用linux作为服务器的代码是一样的,但使用windows作为服务器的代码是不一样的。在Windows中,代码卡在ss.accept()行中。我打赌将代码复制到SO会出错。如果您在linux中运行服务器,而在Windows中运行客户端,我很难相信这会起作用。我尝试过。从windows cmd我得到这个:TCP 0.0.0.0:2002 0.0.0:0侦听TCP[::]:2002[::]:0侦听,从linux我想我必须使用telnet和windows机器ip所以192.168.174.1,我得到这个:尝试192.168.174.1。。。telnet:无法连接到远程主机:连接超时我试图断开所有防火墙以防万一。windows计算机上显示java进程正在正确侦听并绑定到所有接口,如果无法从linux计算机连接,则很可能是网络/防火墙问题。再次检查,您的代码或java运行时没有问题。我已尝试进行配置,但最后我决定关闭防火墙以查看是否存在问题。顺便说一句,您不需要用字符串包装字符串。你可以删除
新字符串
你能澄清这个答案吗?虽然原作者可能在近7年后得到了答案,但不清楚你想说什么。