无法捕获SocketException

时间:2015-09-27 16:16:39

标签: sockets exception dart socketexception

我正在尝试Dart,而且我现在已经在努力解决这个问题了。主叫:

runServer() {
  HttpServer.bind(InternetAddress.ANY_IP_V4, 8080)
  .then((server) {
    server.listen((HttpRequest request) {
      request.response.write('Hello, World!');
      request.response.close();
    });
  });
}

曾经像魅力一样。然后,尝试

try {
    runServer();
} on Error catch (e) {
    print("error");
} on Exception catch(f) {
    print("exception");
}

现在我希望如果我使用这个try-catch并且不止一次地开始听同一个端口,因为我抓住了所有异常和所有错误,程序就不会这样做。崩溃。但是,在运行代码两次后,我得到:

而不是输入任何try / catch子句
  

Uncaut Error:SocketException:无法创建服务器套接字(操作系统错误:通常只允许使用每个套接字地址(协议/网络地址/端口)。

虽然我理解错误是什么,但我不明白为什么它只是输入catch错误/异常条款?

2 个答案:

答案 0 :(得分:2)

至少使用try / catch https://www.dartlang.org/docs/tutorials/futures/)无法捕获异步错误,除非您使用async / await({{3 }})

另见https://www.dartlang.org/articles/await-async/

  

您可以使用done对象上的WebSocket未来来获取该错误,例如:

import 'dart:async';
import 'dart:io';

main() async {
  // Connect to a web socket.
  WebSocket socket = await WebSocket.connect('ws://echo.websocket.org');

  // Setup listening.
  socket.listen((message) {
    print('message: $message');
  }, onError: (error) {
    print('error: $error');
  }, onDone: () {
    print('socket closed.');
  }, cancelOnError: true);

  // Add message, and then an error.
  socket.add('echo!');
  socket.addError(new Exception('error!'));

  // Wait for the socket to close.
  try {
    await socket.done;
    print('WebSocket donw');
  } catch (error) {
    print('WebScoket done with error $error');
  }
}

答案 1 :(得分:1)

您可以指定SocketException

try {
  //network request
} on SocketException catch (_) {
  //handle socket exception here
} catch (_) {
  //handle other error
}