Java > PHP 套接字 - 消息开头的垃圾桶



我有一个java服务器与从apache调用的PHP脚本通信。我的目标是在请求时从java服务器发送JSON到php客户端,但是有一些东西在客户端收到时得到前缀。

JAVA

in = new BufferedReader(new InputStreamReader (socket.getInputStream()));                  
out= new DataOutputStream(socket.getOutputStream());
//The server receives a JSON from the PHP script and replies. It recives and converts to a Gson JSON no problem.
String reply = "{"status":"reg","token":""+client.getToken()+""}rn";
//reply = "HELLOr";
out.writeUTF(reply);
PHP

$rec = socket_read($socket, 2048,PHP_NORMAL_READ);
echo "Receiving... ";
echo $rec;

问题是收到的消息是预先固定了一些废话。

PHP输出

收到……1{"状态":"注册","令牌":"QOPIPCNDI4K97QP0NAQF"}

如果我发送"HELLOr"

收到……>

你好

您不应该使用DataOutputStream.writeUTF(),除非您正在使用DataOutputStream.readUTF()来读取消息。

下面是writeUTF()的javadoc代码片段:

使用修改后的UTF-8将字符串写入底层输出流以独立于机器的方式进行编码。

首先,将两个字节写入输出流,就像由writeShort方法,给出后面的字节数。这个值是实际写入的字节数,而不是字符串。在长度之后,输出字符串的每个字符,按顺序,使用修改后的字符UTF-8编码。如果不抛出异常,写入的计数器由写入输出流的总字节数。这将是至少两个加上str的长度,最多两个加上三倍字符串长度

上面加粗的部分可能会告诉你为什么你的消息开头会出现奇怪的字符。

这里有一个解决方法,我相信会对你的情况有效

BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
out.write(os.getBytes("UTF-8"));

参考:为什么DataOutputStream.writeUTF()在开始时添加额外的2个字节?

最新更新