猿问

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

我正在使用 java socket 将数据从客户端传输到我的服务器,用户必须单击一个按钮才能打开与特定端口的连接,并且客户端必须运行可执行的 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();

    }

}

}


qq_遁去的一_1
浏览 186回答 1
1回答

天涯尽头无女友

最后,我可以通过使用server.setSoTimeout(10 * 1000);您可以设置超时时间来解决这个问题,以毫秒为单位。再次在服务器端,你可以用类似的方式实现这个逻辑            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();        }
随时随地看视频慕课网APP

相关分类

Java
我要回答