首页 > 解决方案 > 通过 Android 套接字发送和接收字节的两个问题:

问题描述

我在发送和接收字节方面遇到了 JAVA/Android 工作室的问题。值得注意的是:使用 TCP 套接字发送和接收超过 127 的字节值。

我在这里收到数据:

    try {
        mBufferOut = new PrintWriter(socket.getOutputStream());
        mBufferIn = new InputStreamReader(socket.getInputStream(), "UTF-8");
        char[] buffer = new char[64];

        while (mRun) {
mBufferIn.read(buffer);
            mServerMessage = String.valueOf(buffer);
            if (mServerMessage != null && mMessageListener != null) {
                mMessageListener.messageReceived(mServerMessage);
            }
            mServerMessage = null;
        }

并在此处发送数据:

public void sendMessage(final char[] message) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if (mBufferOut != null) {
                    mBufferOut.write(message);
                    mBufferOut.flush();
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }

当我收到数据时,所有超过 127 的数据都返回为“231、191、189”。当我发送数据时,值 x 超过 127 的每个字节都返回为“195,x”。

我怎样才能干净地解决这个问题?

标签: javaandroidsocketsbyte

解决方案


我不认为发送一个Stringas 数组char并使用String.valueOf()它来恢复它是正确的方法。

String已经有一种将自身转换为字节的机制:

byte[] bytes = text.getBytes("UTF-8");
...
String text = new String(bytes, "UTF-8");

尝试使用这两种方法进行转换Stringbyte[]反之亦然。


推荐阅读