关于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个回答

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

你的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();
        }
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();
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问