有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAsocket调用次数过多

我正在尝试实现一个ServerSocket,但我无法理解,如果我关闭连接,为什么代码会被调用3次。这是我的密码:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import static java.lang.System.out;

public class Main {


    public static void main(String[] args) throws IOException {

        int port = 8080;
        ServerSocket serverSocket = new ServerSocket(port);
        out.println("Listening ..");

        while(true){
            Socket socket = serverSocket.accept();
            out.println("Connected" + socket.getLocalAddress());
            new Thread(new MultiThreadServer(socket)).start();
        }

    }
}



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

import static java.lang.System.out;

public class MultiThreadServer implements  Runnable{

    Socket clientSocket;

    MultiThreadServer(Socket clientSocket){ this.clientSocket = clientSocket;};

    @Override
    public void run() {

        try{
            out.println("inside thread");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
            String request = bufferedReader.readLine();
            out.println("request: " + request);
            bufferedReader.close();
            this.clientSocket.close(); //Without this line, the code is only called once
        }catch(IOException e){
            out.println(e);
        }

    }


}

因此,通过调用clientSocket上的close()方法,将调用内部调用的“while(true)”3次,而不调用该方法,将调用一次。 这是带有socket的日志。close():

Listening ..
Connected/0:0:0:0:0:0:0:1
inside thread
request: GET /tttes HTTP/1.1
Connected/0:0:0:0:0:0:0:1
inside thread
request: GET /tttes HTTP/1.1
Connected/0:0:0:0:0:0:0:1
inside thread
request: GET /tttes HTTP/1.1

这是没有socket的日志。close():

Listening ..
Connected/0:0:0:0:0:0:0:1
inside thread
request: GET /tttes HTTP/1.1

共 (1) 个答案

  1. # 1 楼答案

    更有可能的情况是,您的客户端正在等待来自服务器的数据,并且在上一次连接关闭之前不会尝试再次连接。这可以解释你看到的行为

    如果您有多个并发客户端,一个连接不知道您不会关闭一个不相关连接的连接