为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_遁去的一_1 2021-09-12 14:32:04
我正在使用 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();    }}}
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

最后,我可以通过使用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();

        }


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信