java - 连接被拒绝:连接,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 发送它们
解决方案
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");
}
推荐阅读
- ios - 活动视图中的ios“复制到myApp”
- intellij-idea - 如何退出 PhpStorm 中的“编辑为表格”模式?
- tensorflow - 需要 tensorflow-gpu 时“没有名为 tensorflow 的模块”
- html - 具有自动高度的子 div 彼此相邻
- python - 大图实例IOU快速计算
- c++ - 函数输出问题
- android - 我可以完全更改我的移动应用程序的基本代码,并且仍然保留我在 Google Play 和 Apple Store 上的下载次数吗?
- python - 熊猫分组计数条件
- python - 在 Python 上安装 xgboost - 找不到频道
- logic - 使用 MQL4 限制每对交易