简体   繁体   中英

Java sockets - Output stream from server to client via method call

I have this code that keeps the server running in a thread. The purpose of leaving the server open is that I want to send something to the client through this server via a static method.

Here's the thread:

public class SampleThread extends Thread {

    static PrintWriter out;
 
    public void run() {
        while(true) {
            try(
                ServerSocket server = new ServerSocket(SAMPLE_PORT);
                Socket socket = server.accept();
            ){
                out = new PrintWriter(socket.getOutputStream());
                while(true) {
                    //nothing, just keeps the server running (is this working?)
                }
            }catch (IOException e){
                    //JDialog message that says retrying to connect
            }
        }
    }
}

Here's the static method that's that uses the server to send something the client:

static void sendToClient(String s1, String s2){
    out.write(s1 + "\n");
    out.write(s2 + "\n");
    out.flush();
}

When it comes to the purpose of sending something to the client from the server via a method call, it works. However, if I close the connection on the client's side, the program above can't throw the IOException. the out.write() method is not even throwing any error at all, it just accepts whatever I pass to it.

What can I do to make it so that the catch (IOException e) will still be triggered once the client closes the connection?

Nevermind. Adding a socket input read in the empty while(true){} block did the trick.

Here's what I added on it:

socket.getInputStream().read();

Then on the catch block I added an out = null:

catch (IOException e){
    //JDialog message that says retrying to connect
    out = null;
}

After that I just need to check if out:= null before executing what's in the static method:

static void sendToClient(String s1, String s2){
    if(out != null) {
        out.write(s1 + "\n");
        out.write(s2 + "\n");
        out.flush();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM