java - 如何解码来自 TCP 套接字的数据

标签 java python sockets tcp chat

我正在尝试使用 python 制作的服务器和 java 制作的客户端制作一个非常简单的聊天程序。但是我不知道如何解码服务器从客户端接收到的数据。客户端发送并编码为 UTF-8。

只是打印它看起来像这样:http://i.imgur.com/0usK6j7.jpg

首先从 UTF-8 解码它看起来像这样:http://i.imgur.com/Ctwivl4.jpg

我假设可以删除 NUL 字符或\x00。包装整个消息的 b'' 也是如此。第二个字符似乎指定了消息的长度。但是我该如何解码呢?我应该手动删除字符吗?我知道这是一个非常基本的问题,之前可能有人问过,但我什至不知道要搜索什么。

最佳答案

In the java client I have a DataOutputStream object which i use with this method: out.writeUTF(input);

根据documentation of that method ,它不会将 UTF-8 写入输出流。它说“首先,两个字节被写入输出流”,这解释了字符串之前的 16 位长度。甚至在那之后它不写 UTF-8,它写在 Java 自己的特殊编码中,它称之为 Modified UTF-8这实际上是 CESU-8 的变体,而不是 UTF-8。

因此,首先,您需要明确您希望在客户端和服务器之间进行通信的确切格式:协议(protocol)。它是普通的UTF-8吗? writeUTF 发出的是奇怪的结构化编码吗?是别的东西吗?然后编写您的客户端和服务器以遵循该规范。

关于java - 如何解码来自 TCP 套接字的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750350/

相关文章:

java - AspectJ @DeclareParents defaultImpl 代码在用作依赖项时不使用

python - Gittle - "unexpected keyword argument ' pkey'”

python bittorrent 对等协议(protocol)无法连接到任何对等点

C++ 套接字只发送前 4 个字节的数据

c++ - Windows 7 中 C 套接字编程的 IDE

java - 在 Play 1.x 框架中使用 SOAP Web 服务

java - 测试通用 Java 方法时出错

Java/Scala Kafka Producer 不向主题发送消息

python - googletrans 停止工作,出现错误 'NoneType' 对象没有属性 'group'

python - 没有numpy的矩阵转置,错误: list index out of range