Android - 发送和接收字节

时间:2015-06-15 21:36:07

标签: java android

我有一个tcp连接,我尝试以字节发送和接收消息,但我不知道它是如何工作的。

以下是我要发送的代码:

public void write(String message) {
    try {
        byte[] b = message.getBytes("UTF-8");
        writer.write(b.toString());
        writer.newLine();
        writer.flush();
    } catch (IOException e) {
        Log.e(MainActivity.TAG, "exception", e);
        e.printStackTrace();
    } catch (Exception e) {
        Log.e(MainActivity.TAG, "exception", e);
        e.printStackTrace();
    }
}

这是接收

String message = client.reader.readLine();
JSONObject json = new JSONObject(message);

我再试一次:)

如何将收到的字节数组转换为mysql数据库的完整unicode字符串?我在我的数据库中使用charset Utf8m4。

这是我的代码

byte[] message = System.Text.Encoding.UTF8.GetBytes(client.reader.ReadLine()); // client.reader.ReadLine() is already a byte[]

string encoded = System.Text.Encoding.UTF8.GetString(message);
JToken token = JObject.Parse(encoded);

我的代码不起作用。我明白了:

{"Id":"Test","Content":"hey???"}

2 个答案:

答案 0 :(得分:0)

    byte[] b = message.getBytes("UTF-8");
    writer.write(b.toString());

如果这是你要求的代码,那就没意义了。它当然应该是

writer.write(message);

目前您正在发送[B@NNNNNNNNNNN形式的内容,这是字节数组的哈希码。

答案 1 :(得分:0)

我找到了一个解决方案,谢谢@EJP。

在java(客户端)

writer.write(B64.encode(message)); // message is a string

在C#(服务器端)

string encoded = System.Text.Encoding.UTF8.GetString(message);
JToken token = JObject.Parse(encoded);

要保存数据库中的字节,请使用blob作为类型。

Encoding.UTF8.GetBytes(bluuub)

从数据库中获取字节

byte[] b = (byte[])reader.GetValue(0);
string bluuub = Encoding.UTF8.GetString(b);