如果服务器打开到端口的连接但客户端没有发送任何东西会发生什么? (Java Server Socket)

问题描述 投票:-1回答:1

我正在使用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();
    }
}

}

java serversocket
1个回答
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();
        }
© www.soinside.com 2019 - 2024. All rights reserved.