首页 > 解决方案 > 连接被拒绝:连接,java套接字

问题描述

我是使用 java 套接字的新手。我有一个我无法解决的问题。我有一个具有公共 IP 的服务器,在它上面执行 java 服务器,然后我有一个 android 应用程序客户端。使用套接字从客户端与服务器进行通信,当我尝试以相反的方式进行时,问题就来了。我尝试从服务器向客户端发送确认消息。我尝试多少次都没关系,因为我总是会遇到这个错误:

java.net.ConnectException:连接被拒绝:连接

at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at server.ServerEntrada.run(ServerEntrada.java:48)
at java.lang.Thread.run(Thread.java:748)

我打开了路由器端口 9000 和 9001。

客户端通过端口 9000 发送数据,服务器接收它们。然后服务器在应用程序等待时通过端口 9001 发送它们

标签: javaandroidsockets

解决方案


if(password.equals("asd")){
    System.out.println("Abriendo socket");
    socketSalida = new Socket(socketEntrada.getInetAddress().getHostAddress(),puertoSalida);
    DataOutputStream datosSalida = new DataOutputStream(socketSalida.getOutputStream());
    datosSalida.writeUTF("OK");
}

问题就在这里。您的服务器正在尝试连接到您的客户端,但它不能,因为您的客户端是客户端,而不是服务器。

它不需要。它已经与客户端建立了连接,它从中读取密码。将其更改为:

if(password.equals("asd")){
    System.out.println("Abriendo socket");
    DataOutputStream datosSalida = new DataOutputStream(socketEntrada.getOutputStream());
    datosSalida.writeUTF("OK");
}

推荐阅读