java.net.ConnectException:连接被拒绝
我正在尝试实现TCP连接,从服务器端一切正常,但当我运行客户端程序(从客户端计算机)时,我得到以下错误:java.net.ConnectException:连接被拒绝,java,networking,tcp,Java,Networking,Tcp,我正在尝试实现TCP连接,从服务器端一切正常,但当我运行客户端程序(从客户端计算机)时,我得到以下错误: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at jav
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at TCPClient.main(TCPClient.java:13)
客户端代码:
//TCPClient.java
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception {
String FromServer;
String ToServer;
Socket clientSocket = new Socket("localhost", 5000);
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
System.in));
PrintWriter outToServer = new PrintWriter(
clientSocket.getOutputStream(), true);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
while (true) {
FromServer = inFromServer.readLine();
if (FromServer.equals("q") || FromServer.equals("Q")) {
clientSocket.close();
break;
} else {
System.out.println("RECIEVED:" + FromServer);
System.out.println("SEND(Type Q or q to Quit):");
ToServer = inFromUser.readLine();
if (ToServer.equals("Q") || ToServer.equals("q")) {
outToServer.println(ToServer);
clientSocket.close();
break;
} else {
outToServer.println(ToServer);
}
}
}
}
}
我想检查一下:
- 您尝试连接的主机名和端口
- 服务器端已成功开始正确侦听
- 没有防火墙阻止连接
最简单的起点可能是尝试使用telnet或Putty从客户机手动连接。如果成功,那么问题就出在客户端代码中。如果没有,你需要找出为什么没有。在这方面可能会对您有所帮助。此异常表示您尝试连接的IP/端口上没有侦听服务:
- 您试图连接到错误的IP/主机或端口
- 您尚未启动服务器
- 您的服务器未侦听连接
- 在Windows服务器上,侦听待办事项队列已满
Socket-clientSocket=新套接字(“localhost”,5000)代码>
做
Socket-clientSocket=新套接字(serverName,5000)代码>
客户端必须连接到serverName,该名称应与实例化ServerSocket
的框的名称或IP相匹配(必须可以从客户端计算机访问该名称)。顺便说一句:重要的不是名字,而是IP地址……我也有同样的问题,但在运行客户端之前运行服务器解决了这个问题 可能是以前有一个客户端实例仍在端口5000上运行和侦听。希望我的经验对其他人有用。我使用相同的异常堆栈跟踪来面对这个问题,但我无法理解问题是什么。我尝试连接的数据库服务器正在运行,端口已打开并正在接受连接
问题在于互联网连接。我使用的internet连接不允许连接到相应的服务器。当我更改连接详细信息时,问题得到了解决。我在名为vernemq的Mqtt代理中遇到了相同的问题。但通过添加以下内容解决了问题
$sudo vmq管理侦听器显示
显示vernemq允许的IP和端口列表
$sudo vmq admin listener start port=1885-a 0.0.0.0--mountpoint/appname--nr_of_acceptors=10--max_connections=20000
添加任何ip和新端口。现在你应该能够连接没有任何问题
希望它能解决你的问题。
我之所以出现此错误,是因为我关闭了一个for循环中的ServerSocket
,该循环尝试接受其中的客户端数量(我没有完成接受所有clint)
因此,在关闭套接字的位置要小心在我的例子中,我给了套接字服务器的名称(在我的例子中是“raspberrypi”),取而代之的是IPv4地址,或者指定IPv6已断开(名称解析为IPv6)我也有同样的问题,问题是我没有关闭套接字对象。在使用Socket.close()之后;问题解决了。
这个代码对我有用
ClientDemo.java
public class ClientDemo {
public static void main(String[] args) throws UnknownHostException,
IOException {
Socket socket = new Socket("127.0.0.1", 55286);
OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
os.write("Santosh Karna");
os.flush();
socket.close();
}
}
及
ServerDemo.java
public class ServerDemo {
public static void main(String[] args) throws IOException {
System.out.println("server is started");
ServerSocket serverSocket= new ServerSocket(55286);
System.out.println("server is waiting");
Socket socket=serverSocket.accept();
System.out.println("Client connected");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str=reader.readLine();
System.out.println("Client data: "+str);
socket.close();
serverSocket.close();
}
}
在我的例子中,我必须在Expose daemon附近打一个复选标记tcp://localhost:2375 在docker
设置中没有TLS
(在任务栏右侧,右键单击docker
,选择setting
)我想在上面的答案中添加一点是我的经验-
“我在localhost上托管了我的服务器,并试图通过android模拟器通过指定合适的URL(如http://localhost/my_api/login.php
。我收到了连接被拒绝错误“
请注意-当我在电脑上打开浏览器并使用相同的URL(http://localhost/my_api/login.php)我得到了正确的回答
因此,在我的例子中,问题是术语localhost
,我将其替换为我的服务器的IP(因为您的服务器托管在您的计算机上),这使得它可以从我的模拟器在同一台PC上访问
要获取本地计算机的IP,可以在cmd上使用ipconfig
命令
您将获得类似192.68.xx.yy的IPv4
瞧,这是你的机器的IP,你的服务器就在这里。
然后使用它而不是本地主机
http://192.168.72.66/my_api/login.php
注意-您将无法从此计算机之外的任何节点访问此专用IP。(如果需要,您可以使用Ngnix)我也有同样的问题,结果是由于catalina.out
文件的权限不正确。tomcat用户无法写入它。一旦我修复了权限,问题就解决了。我从tomcat8 initd.log
文件中的日志了解到这是一个权限问题:
/usr/sbin/tomcat8:line 40:/usr/share/tomcat8/logs/catalina.out:权限被拒绝
我更改了DNS网络,解决了问题您可能没有初始化服务器或客户端试图连接到错误的ip/端口。将本地主机更改为您的ip地址
localhost
//to you local ip
192.168.xxxx
你能把客户代码贴出来吗?如果是远程客户端,请确保没有任何防火墙问题!我关闭了客户端和服务器上的防火墙&仍然存在相同的问题服务器正在监听哪个接口。如果您仅在localhost上侦听,则无法远程连接。我尝试在使用localhost face palm时进行远程连接。这是我第一次尝试使用TCP><如何使其远程工作?请记住,在这两者之间可能还有一些“裸机”硬件防火墙。。。如果是cl,它能工作吗
localhost
//to you local ip
192.168.xxxx