无法捕获SocketException

问题描述 投票:2回答:2

我正在试用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 并开始监听同一个端口不止一次,因为我捕捉了所有的异常和所有的错误,程序就不会崩溃。然而,在运行了两次代码之后,我没有输入任何 trycatch 子句,而是得到了以下结果。

Uncaut Error: SocketException: SocketException: Failed to create server socket (OS) Failed to create server socket (OS Error: 每个socket地址(protocolnetwork addressport)通常只允许使用一次。

虽然我明白错误是什么,但我不明白为什么不直接输入catch ErrorException子句?

sockets exception dart socketexception
2个回答
2
投票

不能使用异步错误捕获 trycatch (https:/www.dartlang.orgdocstutorialsfutures),至少除非您使用的是 asyncawait (https:/www.dartlang.orgarticlesawait-async)

另见 https:/github.comdart-langsdkissues24278。

您可以使用 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');
  }
}

0
投票

你可以指定 SocketException

try {
  //network request
} on SocketException catch (_) {
  //handle socket exception here
} catch (_) {
  //handle other error
}
© www.soinside.com 2019 - 2024. All rights reserved.