客户端 - 服务器连接被拒绝 - Java

时间:2021-04-02 07:35:55

标签: java networking

我正在学习网络编程。我试图实现客户端服务器连接。但是,我遇到了错误:“线程“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)

我不知道为什么连接被拒绝

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

由于服务器终止,连接被拒绝。
Server.java 中的代码读取一行,发送响应 ("yes"),然后终止。
您的输出显示它打印 "GET / HTTP/1.1" 表明其他东西(不是您的 Client 类)使用 HTTP 请求访问了端口 8080(这对于端口 8080 来说并不意外)。
服务器响应然后终止,这将返回到 shell 提示符。
然后当您运行 java Client 时,没有服务器在运行,您会看到连接错误。
如果您希望服务器读取多个请求而不是在一个请求后终止,您需要从 bf.readLinepr.flush 的所有内容进行循环。