Java 尝试重新打开连接时发生套接字关闭错误

Java 尝试重新打开连接时发生套接字关闭错误,java,Java,我正在制作一个程序,每次客户端从服务器接收数据时都需要更新UI。为此,每次都必须关闭并重新打开套接字和服务器套接字。尽管当程序尝试接受新连接时,以下是我的代码和错误: public void startServer(){ Thread serverstart = new Thread(){ public void run() { try { serversocket = new

我正在制作一个程序,每次客户端从服务器接收数据时都需要更新UI。为此,每次都必须关闭并重新打开套接字和服务器套接字。尽管当程序尝试接受新连接时,以下是我的代码和错误:

    public void startServer(){
    Thread serverstart = new Thread(){
        public void run() {
                try {       
                    serversocket = new ServerSocket(socket);

                    while(true){
                        skt = serversocket.accept();
                        close.setEnabled(true);
                        new Thread(new newClient(skt)).start();
                    }
            } catch (IOException e){
                e.printStackTrace();
              }
        }
    };serverstart.start();
}
static class newClient implements Runnable {
    private Socket socket;
    static PrintStream output;
    public newClient(Socket skt){
        this.socket = skt;
    }
    @Override
    public void run(){
        try {
        output = new PrintStream(socket.getOutputStream());
        } catch(IOException ioe){
            ioe.printStackTrace();
        }
    }
}

    public void sendData(){                 
        tallydata = Integer.toString(preview) + " " + Integer.toString(program);        
                System.out.println(tallydata);
                newClient.output.print(tallydata);

        try{
                skt.close();
                serversocket.close();
            } catch(IOException e){
                e.printStackTrace();
            } 
            startServer();                  
    }
java.net.SocketException: Socket closed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
    at java.net.ServerSocket.implAccept(ServerSocket.java:522)
    at java.net.ServerSocket.accept(ServerSocket.java:490)
    at TallySystem.servergui$1.run(servergui.java:201)
套接字在sendData()方法的末尾关闭,然后调用startServer()方法重新启动连接。以下是错误:

    public void startServer(){
    Thread serverstart = new Thread(){
        public void run() {
                try {       
                    serversocket = new ServerSocket(socket);

                    while(true){
                        skt = serversocket.accept();
                        close.setEnabled(true);
                        new Thread(new newClient(skt)).start();
                    }
            } catch (IOException e){
                e.printStackTrace();
              }
        }
    };serverstart.start();
}
static class newClient implements Runnable {
    private Socket socket;
    static PrintStream output;
    public newClient(Socket skt){
        this.socket = skt;
    }
    @Override
    public void run(){
        try {
        output = new PrintStream(socket.getOutputStream());
        } catch(IOException ioe){
            ioe.printStackTrace();
        }
    }
}

    public void sendData(){                 
        tallydata = Integer.toString(preview) + " " + Integer.toString(program);        
                System.out.println(tallydata);
                newClient.output.print(tallydata);

        try{
                skt.close();
                serversocket.close();
            } catch(IOException e){
                e.printStackTrace();
            } 
            startServer();                  
    }
java.net.SocketException: Socket closed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
    at java.net.ServerSocket.implAccept(ServerSocket.java:522)
    at java.net.ServerSocket.accept(ServerSocket.java:490)
    at TallySystem.servergui$1.run(servergui.java:201)

谢谢。

为什么要关闭并重新打开服务器?只要启动一次,别管它。这就是它应该被使用的方式

无论如何,根据:

公众假期结束()

关闭此套接字。当前在accept()中阻塞的任何线程都将抛出SocketException

这正是你的问题。您正在关闭ServerSocket,而它正忙于等待连接