kliuhjw
你狗哥
2020-01-20 21:52
采纳率: 31.3%
浏览 190
已采纳

关于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条回答 默认 最新

  • caozhy
    已采纳

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

    点赞 评论
  • weixin_44700117
    「已注销」 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();
            }
    
    点赞 评论
  • huiao8809
    「已注销」 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();
    }
    
    点赞 评论

相关推荐