我正在尝试实现TCP连接,从服务器端一切正常,但是当我运行客户端程序(从客户端计算机)时,我收到以下错误:
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)
我尝试更改套接字号以防它正在使用但无济于事,是否有人知道导致此错误的原因&amp;如何解决它。
服务器代码:
//TCPServer.java
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
String fromclient;
String toclient;
ServerSocket Server = new ServerSocket(5000);
System.out.println("TCPServer Waiting for client on port 5000");
while (true) {
Socket connected = Server.accept();
System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
+ ":" + connected.getPort() + " IS CONNECTED ");
BufferedReader inFromUser = new BufferedReader(
new InputStreamReader(System.in));
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connected.getInputStream()));
PrintWriter outToClient = new PrintWriter(
connected.getOutputStream(), true);
while (true) {
System.out.println("SEND(Type Q or q to Quit):");
toclient = inFromUser.readLine();
if (toclient.equals("q") || toclient.equals("Q")) {
outToClient.println(toclient);
connected.close();
break;
} else {
outToClient.println(toclient);
}
fromclient = inFromClient.readLine();
if (fromclient.equals("q") || fromclient.equals("Q")) {
connected.close();
break;
} else {
System.out.println("RECIEVED:" + fromclient);
}
}
}
}
}
客户代码:
//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);
}
}
}
}
}
答案 0 :(得分:279)
此异常表示没有服务侦听您尝试连接的IP /端口:
答案 1 :(得分:34)
我会检查:
最简单的起点可能是尝试使用telnet或Putty从客户端计算机手动连接。如果成功,则问题出在您的客户端代码中。如果没有,你需要找出为什么它没有。 Wireshark可以在这方面为您提供帮助。
答案 2 :(得分:6)
我遇到了同样的问题,但在运行客户端之前运行服务器修复了它。
答案 3 :(得分:4)
您必须将客户端套接字连接到远程ServerSocket。而不是
Socket clientSocket = new Socket("localhost", 5000);
做
Socket clientSocket = new Socket(serverName, 5000);
客户端必须连接到 serverName ,该名称应与实例ServerSocket
实例化的框的名称或IP相匹配(名称必须可从客户端计算机访问)。顺便说一句:这不是重要的名字,而是关于IP地址......
答案 4 :(得分:4)
我遇到了与mqtt经纪人vernemq相同的问题。但是通过添加以下内容解决了这个问题。
答案 5 :(得分:2)
希望我的经历对某人有用。我遇到了相同的异常堆栈跟踪问题,我无法理解问题所在。我尝试连接的数据库服务器正在运行,端口已打开,正在接受连接。
问题在于互联网连接。我正在使用的互联网连接不允许连接到相应的服务器。当我更改连接细节时,问题得到了解决。
答案 6 :(得分:1)
在我的情况下,我给套接字服务器的名称(在我的情况下&#34; raspberrypi&#34;),而是IPv4地址使它或指定,IPv6被破坏(名称解析为一个IPv6)
答案 7 :(得分:1)
在我的情况下,我必须在Expose daemon on tcp://localhost:2375 without TLS
设置的docker
附近放置一个复选标记(在任务栏的右侧,右键单击docker
,选择{{1} }})
答案 8 :(得分:1)
我收到此错误是因为我在for循环中关闭ServerSocket
,试图接受其中的客户端数量(我没有完成接受所有clints)
所以要小心关闭你的Socket
答案 9 :(得分:0)
两端的端口号始终不同
答案 10 :(得分:0)
我有同样的问题,问题是我没有关闭套接字对象。使用socket.close();问题解决了。 这段代码适合我。
ClientDemo.java
^(\w{5}-\w{5}-\w{5}-\w{5}-\w{5})$
和 ServerDemo.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();
}
}
答案 11 :(得分:0)
我更改了DNS网络并解决了问题
答案 12 :(得分:0)
您可能没有初始化服务器或客户端正在尝试连接到错误的ip /端口。
答案 13 :(得分:0)
将本地主机更改为您的 IP 地址
localhost
//to you local ip
192.168.xxxx
答案 14 :(得分:0)
有一个名为MySQL80的服务应该运行以连接到数据库
对于windows,你可以通过搜索服务来访问它,而不是寻找MySQL80服务并确保它正在运行
答案 15 :(得分:-1)
可能是客户端的前一个实例仍在运行并正在侦听端口5000。
答案 16 :(得分:-1)
我遇到了同样的问题,事实证明是由于catalina.out
文件的许可不正确。 Tomcat用户无法写该文件。修复权限后,问题就解决了。我从tomcat8-initd.log
文件的日志中知道这是一个权限问题:
/usr/sbin/tomcat8: line 40: /usr/share/tomcat8/logs/catalina.out: Permission denied