微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在套接字传输中接收额外的字节

如何解决在套接字传输中接收额外的字节

所以我写了一个程序,使用python套接字库在raspi和android手机之间通过wifi直接通信。非常简单,目前手机发送“最新消息!” pi接收它并打印它接收的内容。除了非常不可靠之外,它还能工作,并且我在消息中得到了一些额外的字节。

发送“最新消息!”时我收到
b’\xac\xed\x00\x05t\x00\tWhats up!’
b’\xac\xed\x00\x05’

我假设第二个结果是由于丢包引起的,但是我不确定消息开头的所有内容是什么。当我将消息更改为“最新消息!测试1 !!”我知道了 b’\xac\xed\x00\x05t\x00\x12Whats up! Test 1!!’(请注意,现在添加\x12

有人可以向我解释这是什么吗?它是套接字协议的一部分吗?以及如何在我的程序中说明呢?

供参考,在我的pi上运行的程序如下:

import socket;


server = socket.socket();
host = "192.168.4.1";
port = 4444;

server.bind((host,port));

server.listen();

client,addr = server.accept();
print (str(client.recv(2056)));

client.close();

如果相关,这也是我的android客户端代码

    public void runclient() throws IOException {
        socket = new Socket();
        socket.setReuseAddress(true);
        tcpsocketManager.addTextToScreen("Starting Client Socket " + groupOwnerAddress + " " + port);
        socket.connect((new InetSocketAddress(groupOwnerAddress,port)),1000);
        OutputStream os = socket.getoutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(os);
        oos.writeObject(new String("Whats up!"));

        oos.close();
        os.close();
        socket.close();
    }

解决方法

您需要使用OutputStreamWriter而不是ObjectOutputStream。后者用于编写Java序列化的对象。

自从我写Java以来​​已经有两年了,但是我认为这是正确的。

OutputStreamWriter writer = new OutputStreamWriter(os);
writer.write("What's up!");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。