服务器套接字中的线程和处理程序

时间:2014-01-03 10:46:13

标签: java multithreading sockets

new Handler(clientSocket);如何在没有对象的情况下实例化?有人可以提供一些见解吗?

public class Server1 {

    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(15897);
            while (true) {
                Socket clientSocket = serverSocket.accept();

                new Handler(clientSocket);

            }
        } catch (IOException e)
        {
            System.out.println("problem here 1");
        }
    }
}

class Handler implements Runnable {

    int red;
    int reads, r;

    Socket clientSocket;

    Handler(Socket s)
    {
        this.clientSocket = s;

        new Thread(this).start();

    }

    public void run(){        
        BufferedReader bufferedReader;
        try {

            bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            String inputLine = bufferedReader.readLine();

3 个答案:

答案 0 :(得分:1)

您的代码不完整,因此很难肯定地说,但请注意,在Handler的构造函数中创建并启动了一个线程,该线程执行run()

在该函数内部(因此在单独的线程中),输入流从套接字读入BufferedReader,从中获取第一行。

线程将阻塞,直到通过套接字连接接收到一行。

因为你的代码已从这一点切断,我不知道它还做了什么。

答案 1 :(得分:1)

在您的代码中,服务器将继续监听传入的客户端。

       Socket clientSocket = serverSocket.accept();

serverSocket.accept()等待直到找到连接或客户端。        如果找到客户端,则accept()函数返回一个本地套接字,该套接字连接到客户端的另一个套接字,该套接字在您的代码中被赋予clientSocket

new Handler(clientSocket);

现在clientSocket已提供给Handler类,您正在使用thread来读取clientSocket给出的数据。

此处thread的目的是分别处理每个传入的clientSocket

答案 2 :(得分:0)

我不确定代码到底做了什么,但是根据OOP的概念向你解释它,每次执行while循环时它都会创建一个Handler类的实例。

警告:while(true)循环是错误的代码,当项目运行时,它将以无限循环运行。