Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 封闭式插座问题_Java_Multithreading_Sockets_Runnable_Serversocket - Fatal编程技术网

Java 封闭式插座问题

Java 封闭式插座问题,java,multithreading,sockets,runnable,serversocket,Java,Multithreading,Sockets,Runnable,Serversocket,试图编写一个简单的服务器来回显文本,需要给它多个线程。每当客户端连接时,我都会关闭一个套接字。我不太确定出了什么问题,而且我刚刚开始学习这个,所以我不太了解。如果有人能告诉我出了什么问题,我将不胜感激注意:这段代码显然没有完全完成,我只需要处理上述问题。 import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStream;

试图编写一个简单的服务器来回显文本,需要给它多个线程。每当客户端连接时,我都会关闭一个套接字。我不太确定出了什么问题,而且我刚刚开始学习这个,所以我不太了解。如果有人能告诉我出了什么问题,我将不胜感激注意:这段代码显然没有完全完成,我只需要处理上述问题。

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

import java.io.OutputStream;
import java.io.PrintStream;

import java.net.ServerSocket;
import java.net.Socket;

import java.io.IOException;

public final class EchoServer 
{
    public static void main(String[] args) throws Exception 
    {
        try (ServerSocket serverSocket = new ServerSocket(22222)) 
        {
            while (true) 
            {
                try (Socket socket = serverSocket.accept()) 
                {
                    Thread newThread = new Thread(new server(socket));
                    newThread.start();
                }
            }
        }
    }
}
class server implements Runnable
{   
    Socket mySocket; 
    server(Socket s)
    {
        mySocket = s;
    }

    public void run()
    {
        //while(true)
        //{
            try
            {
                System.out.println("Client connected ");

                InputStream is = mySocket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is, "UTF-8");
                BufferedReader br = new BufferedReader(isr);

                OutputStream os = mySocket.getOutputStream();
                PrintStream out = new PrintStream(os);

                String input = ("...");

                while(!input.equals("exit"))
                {   
                    input = br.readLine();
                    out.println("Server> " + input);
                }
            }
            catch(IOException e)
            {
                System.out.println(e);
            }
        //}
    }
}

尝试使用资源块退出时立即关闭资源,以便

try (Socket socket = serverSocket.accept()) 
{
  Thread newThread = new Thread(new server(socket));
  newThread.start();
}
// socket is closed by here, but newThread may still be running.
因此,只需删除
尝试

Socket socket = serverSocket.accept();
Thread newThread = new Thread(new server(socket));
newThread.start();
// socket is still open here.

但是请记住关闭
服务器中的套接字(最终)。

。。。因此,请删除
try
块。您应该一直读到
br.readLine()
返回
null