打破异常:预期的字符串

时间:2014-09-08 21:41:53

标签: websocket dart dart-io

当我运行我的代码时,我得到:

  

突破异常:预期的字符串

我要做的是使用websocket连接到我的服务器。但是,似乎无论我的服务器是否在线,客户端仍然崩溃。 我的代码:

import 'dart:html';
WebSocket serverConn;
int connectionAttempts;
TextAreaElement inputField = querySelector("#inputField");
String key;
void submitMessage(Event e) {
  if (serverConn.readyState == WebSocket.OPEN) {
    querySelector("#chatLog").text = inputField.value;
    inputField.value = "";
  }
}

void recreateConnection(Event e) {
  connectionAttempts++;
  if (connectionAttempts <= 5) {
    inputField.value = "Connection failed, reconnecting. Attempt" + connectionAttempts.toString() + "out of 5";
    serverConn = new WebSocket("ws://127.0.0.1:8887");
    serverConn.onClose.listen(recreateConnection);
    serverConn.onError.listen(recreateConnection);
  } else {
    inputField.value = "Connections ran out, please refresh site";
  }
}

void connected(Event e) {
  serverConn.sendString(key);
  if (serverConn.readyState == WebSocket.OPEN) {
    inputField.value = "CONNECTED!";
    inputField.readOnly = false;
  }
}

void main() {
  serverConn = new WebSocket("ws://127.0.0.1:8887");
  serverConn.onClose.listen(recreateConnection);
  serverConn.onError.listen(recreateConnection);
  serverConn.onOpen.listen(connected);
  //querySelector("#inputField").onInput.listen(submitMessage);
  querySelector("#sendInput").onClick.listen(submitMessage);
}

我的Dart编辑器没有说明问题的来源,也没有在运行时发出任何警告。

1 个答案:

答案 0 :(得分:1)

您需要使用有效值初始化int connectionAttempts;;
connectionAttempts++;上的null因例外而失败。

您还需要一个onMessage处理程序来接收消息。

serverConn.onMessage.listen((MessageEvent e) {

recreateConnection也应注册onOpen处理程序。 serverConn = new WebSocket之后注册的main()中的监听器将无法正常工作

如果您注册的听众只需要一个活动,那么您可以使用first代替listen

serverConn.onOpen.first.then(connected);

根据@JAre的评论。

尝试使用硬编码字符串

querySelector("#chatLog").text = 'someValue';

确保这不是罪魁祸首。