【问题标题】:Chat application. What should be the end of message character聊天应用。消息字符的结尾应该是什么
【发布时间】:2015-09-02 12:01:56
【问题描述】:

我正在用 Java 创建一个聊天应用程序。用户可以在一条消息中发送多个新行。以前,我不允许用户发送新行。因此很容易使用换行符作为消息结束符。但现在我允许用户在消息中发送新行。我应该使用什么字符/字符串来标记消息的结尾。

【问题讨论】:

  • EOF 字符似乎是个不错的选择。
  • NUL 字符 ('\0') 看起来是个不错的候选。如果您可以更改协议以发送输入长度后跟实际字节,那就更好了。

标签: java chat livechat


【解决方案1】:

您可以通过添加额外的 4 个字节轻松避免消息结束。前 4 个字节代表消息的长度。然后添加完整的消息。

发件人代码示例:

    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());

    String msg = "its a test message";
    byte[] byteMsg = msg.getBytes();

    int length = byteMsg.length;
    byte[] lengthByte = ByteBuffer.allocate(4).putInt(length).array();

    byte[] finalMsg = new byte[length+4];
    System.arraycopy(lengthByte, 0, finalMsg, 0, 4);
    System.arraycopy(byteMsg, 0, finalMsg, 4, length);

    bufferedOutputStream.write(finalMsg);

当您阅读您的信息时,请阅读前 4 个字节。将此 4 字节转换为整数。这是您的传入消息长度。然后解析那些字节。

【讨论】:

    【解决方案2】:

    这是您的应用程序,因此您可以随意使用任何您喜欢的内容,包括 Marko 和 KDM 建议的 EOFNUL 字符。

    只要确保它是您的用户不会在他们的消息中使用的字符。

    【讨论】:

    • 投反对票的请解释投反对票的原因。因为我将在我的简单应用程序中使用此方法。演示通过后,我将使用更高级的方法,例如在消息中指定消息长度。
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多