我正在学习网络编程。我试图实现客户端服务器连接。但是,我遇到了错误:“线程“main”中的异常java.net.ConnectException:连接被拒绝(连接被拒绝)”
我已经尝试将端口从端口 4999 更改为端口 8080
客户代码:
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8080);
PrintWriter pr = new PrintWriter(socket.getOutputStream());
pr.println("is it working ");
pr.flush();
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader bf = new BufferedReader(in);
String str = bf.readLine();
System.out.println("server : " + str);
}
}
服务器代码:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(8080);
Socket socket = ss.accept();
System.out.println("client connected");
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader bf = new BufferedReader(in);
String str = bf.readLine();
System.out.println("client : " + str);
PrintWriter pr = new PrintWriter(socket.getOutputStream());
pr.println("yes");
pr.flush();
}
}
完全错误:
~/test$ javac Client.java
~/test$ javac Server.java
~/test$ java Server
client connected
client : GET / HTTP/1.1
~/test$ java Client
Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/java.net.Socket.connect(Socket.java:558)
at java.base/java.net.Socket.<init>(Socket.java:454)
at java.base/java.net.Socket.<init>(Socket.java:231)
at Client.main(Client.java:7)
我不知道为什么连接被拒绝
感谢您的帮助
答案 0 :(得分:0)
由于服务器终止,连接被拒绝。
Server.java
中的代码读取一行,发送响应 ("yes"
),然后终止。
您的输出显示它打印 "GET / HTTP/1.1"
表明其他东西(不是您的 Client
类)使用 HTTP 请求访问了端口 8080(这对于端口 8080 来说并不意外)。
服务器响应然后终止,这将返回到 shell 提示符。
然后当您运行 java Client
时,没有服务器在运行,您会看到连接错误。
如果您希望服务器读取多个请求而不是在一个请求后终止,您需要从 bf.readLine
到 pr.flush
的所有内容进行循环。