Java ) 选择人们无法输入的令牌或其他想法来解决此问题

Java ) choose the token that people can't input or other idea to solve this issue

我正在制作聊天程序并遇到问题..

我尝试stringtokenize数据包。 包裹内含 4 件物品。

 Timestamp sendTime, String sendUserID, String chattingMessage, String roomNo.

当客户端发送这个数据包时,(packet is string :: String packet;) 我尝试通过一些特殊字符 (#,@,^ ..) 或服务器端的其他东西来标记这个数据包 但是因为chattingMessage, (chattingMessage can include any special character..(user can input any character in message.. so how to choose my tokenizing character?? ..)

我选不出合适的...

有没有人有这个问题的想法和解决方案?? 我很好奇..

设计数据包,使其在字符串内容之前包含字符串的长度。然后您知道该字符串在您的数据包中结束的位置以及下一条数据的开始位置。

您可以研究 .torrent files for BitTorrent 是如何格式化的。设计一个序列化的数据包格式和设计一个文件格式真的是一样的,唯一的区别是你从哪里读取数据。

将用户消息中 \ 的所有实例替换为 \。然后将 ) 替换为 \)。当您检查 ) 时,请确保它前面没有 \。当向用户显示消息时,删除所有未被另一个 \.

处理的 \

我认为客户端必须发送 byte[] 而不是 String。
并且数据包必须通过 POJO,它必须 serialized/deserialized 在通信过程中。