如果服务器打开到端口的连接但客户端未发送任何东西,将会发生什么? (Java服务器套接字)

时间:2018-09-10 09:12:14

标签: java serversocket

我正在使用Java套接字将数据从客户端传输到我的服务器,用户必须单击按钮以打开与特定端口的连接,客户端必须运行可执行jar文件才能将数据发送到打开的端口,但是在某些情况下,由于某些原因,用户单击按钮,然后关闭浏览器选项卡! 当他尝试再次单击该按钮时,它会显示

  

已经在使用的地址:JVM_Bind

有什么办法解决这个问题?!

是否有可能在使用端口之前将其杀死?

我的服务器端类代码,以防万一有人需要检查:

class Server {
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream in = null;

public Server(Integer port) throws Exception {
    try {
        server = new ServerSocket(port);
        JSFUtils.addFacesInformationMessage("Waiting for a Data...");
        socket = server.accept();
        JSFUtils.addFacesInformationMessage("Done");
        in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
        String line = in.readUTF();
        System.out.println("Data Scaned >> " + line);
    } catch (Exception i) {
            i.printStackTrace();
    } finally {
        // close connection
        if (socket != null)
            socket.close();
        if (in != null)
            in.close();
    }
}

}

1 个答案:

答案 0 :(得分:1)

最后,我可以通过使用server.setSoTimeout(10 * 1000);来解决此问题,您可以使用所需的毫秒数来设置超时时间。在指定的时间用完客户端客户端后,它将引发“ SocketTimeoutException”并且用户可以再次再次单击服务器端的按钮,则可以通过类似

的方式实现此逻辑
            try {
            server = new ServerSocket(port);
            server.setSoTimeout(10 * 1000);
            socket = server.accept();
            JSFUtils.addFacesInformationMessage("Scan Completed Successfully");
            // takes input from the client socket
            in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
            String line = in.readUTF();
        } catch (Exception i) {
            if (i instanceof SocketTimeoutException)
                JSFUtils.addFacesErrorMessage("Scan Timeout, Please click Scan again!");
            else
                i.printStackTrace();
        }