1

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

打破异常:预期字符串

我想要做的是使用 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 编辑器没有说明问题出在哪里,也没有给出任何警告,直到运行时。

4

1 回答 1

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';

以确保这不是罪魁祸首。

于 2014-09-09T04:27:44.157 回答