【问题标题】:Connection refused: connect, java socket连接被拒绝:连接,java套接字
【发布时间】:2018-05-17 23:26:27
【问题描述】:

我是使用 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 发送它们

【问题讨论】:

  • 您是否在清单中添加了android.permission.INTERNET 权限?
  • 是的,当然,我可以连接服务器并发送数据,但我不能从服务器向客户端发送数据
  • 您在客户端连接后发送数据?由于异常名称,您似乎正在尝试连接到可能尚未侦听或隐藏在 NAT 后面的客户端。
  • 我将数据发送到服务器,然后,在客户端我有这个代码: Log.i("A","Server entrada esperando ------"); socketEntrada=serverEntrada.accept();我可以看到它正在等待,然后在我将客户端发送到服务器时发送数据,但我得到了那个错误
  • 将代码添加到问题中,不要放在 cmets 部分。

标签: java android sockets


【解决方案1】:
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");
}

【讨论】:

  • 啊,好吧,那么我必须使用同一个端口来发送和修改数据?谢谢你:)
  • 不,你必须使用相同的连接,这意味着你必须使用相同的socket。您无权从这里访问端口。准确。
  • 好的,是的,我正在学习,感谢您的帮助,现在我知道该怎么做了。 :)
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多