【问题标题】:Client - Server Connection Refused - Java客户端 - 服务器连接被拒绝 - Java
【发布时间】:2021-04-02 16:10:20
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

    标签: java networking


    【解决方案1】:

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

    【讨论】:

    • 然后您需要使用单独的终端会话来运行客户端。
    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多