如何捕获dart.io套接字错误?

时间:2018-07-05 05:59:01

标签: sockets error-handling dart aqueduct

我是Dart,渡槽和插座的新手。我在尝试和制作测试项目时要尝试学习所有内容。任何深入的信息和帮助都表示赞赏。

下面的代码对我有用,就像我在渡槽中所期望的那样。问题是我需要在发送套接字之前修改值,所以我需要像这样等待。 “ 等待(套接字中的可变数据)”另外,我在2个地方也做了一些繁重的工作。首先,我需要先解密请求,然后再发送到套接字“ socket.write('$ tempData \ r \ n'); ”。 一旦我从套接字获取数据(侦听)“ 等待(套接字中的可变数据)”,我就需要再次做一些繁重的工作,然后再作为响应发送。

我有一个3个问题,如下所示。

  • 问题1:如果serevr无法访问或关闭,如何捕获错误?
  • 问题2:如何在尝试向套接字发送数据时捕获错误?
  • 问题3:如何在套接字监听返回数据时捕获错误?

代码:

import 'package:aqueduct/aqueduct.dart';
import 'package:niyaziapi/niyaziapi.dart';
import 'package:niyaziapi/util/niyaziprivate.dart';

class LoginController extends Controller {
  @override
  Future<RequestOrResponse> processRequest(Request request) async {
    if (request.path.variables.containsKey('value')) {
      var _xPrivate = (request.path.variables['value']).trim();
      var tempData = await getPrivate(_xPrivate); // doing decryption

      // TODO: Question-1: How to catch error if serevr is not reachable or down
      var socket = await Socket.connect('192.168.1.22', 1024);
      print("socket: $socket");

      // TODO: Question-2: How to catch error when trying send data to socket
      socket.write('$tempData\r\n');

      // TODO: Question-3: How to catch error while socket listen (returning data)has error
      await for (var data in socket) {
        var reply = new String.fromCharCodes(data).trim();
        return new Response.ok("$reply");
      }
    } else {
      return new Response.ok("wrong rquest");
    }
  }

  Future<String> getPrivate(_xPrivate) async {
    // Do some heavy decryption in here then

    return "data";
  }
}

0 个答案:

没有答案