你狗哥 2020-01-20 21:52 采纳率: 0%
浏览 194
已采纳

关于socket连接的问题

例:
假设目标电脑IP地址为192.168.1.12 端口号为5000,设置超时连接时长为10000毫秒(10秒)
下面建立连接

Socket client = new Socket();
client.connect(new InetSocketAddress("192.168.1.12", 5000), 10000);

问:
现在假如这个IP地址或者端口号连接不上 我会报SocketTimeoutException异常 但是这个异常不能通过try catch捕获
如果catch捕获这个异常如下代码

try{
}
catch (SocketTimeoutException e1) {
            e1.printStackTrace();
            System.out.println("--------------");
        }

如操作上面代码会提示需要throws这个异常
图片说明

但是如果我throws了这个异常的话 再运行代码,如果时间超时 控制台还是会报上述SocketTimeoutException异常
求大神解决
现在需实现在超时情况下控制台打印一个报警信息并且控制台不爆红!

  • 写回答

3条回答 默认 最新

  • threenewbee 2020-01-20 22:21
    关注

    你先用Exception看下,丢出来的是什么异常,再照着写。根据提示,你是不是用 IOException 捕获了,它是 TimeoutException 的基类,如果有了它,Timeout 就不会触发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 「已注销」 2020-01-21 11:52
    关注

    你的try块中需要放你有可能出问题的代码,try-catch语句是用来捕获指定代码可能出现的问题,比如下面这样

            try {
                Socket client = new Socket();
                client.connect(new InetSocketAddress("192.168.1.12", 5000), 10000);
            }catch (SocketTimeoutException ex1) {
                ex1.printStackTrace();
            }catch (Exception ex2){
                ex2.printStackTrace();
            }
    
    评论
  • 「已注销」 2020-01-21 15:16
    关注
    try {
                Socket client = new Socket();
                client.connect(new InetSocketAddress("192.168.1.12", 5000), 10000);
    }catch (SocketTimeoutException e1) {
                    //e1.printStackTrace();//不要爆红就不能用这个打印
                    System.out.println("连接超时");
    }catch (IOException e) {//需要捕获这个异常,只有上面的超时异常不行
                    e.printStackTrace();
    }
    
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 IDEA构建失败?怎么搞
  • ¥15 求该题的simpson,牛顿科特斯matlab代码,越快越好
  • ¥30 求解,有偿,可商量价格
  • ¥15 编译arm板子的gcc
  • ¥15 C++代码报错问题,c++20协程
  • ¥15 c++图Djikstra算法求最短路径
  • ¥15 Linux操作系统中的,管道通信问题
  • ¥15 ansible tower 卡住
  • ¥15 等间距平面螺旋天线方程式
  • ¥15 通过链接访问,显示514或不是私密连接