如何解决在套接字传输中接收额外的字节
所以我写了一个程序,使用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 举报,一经查实,本站将立刻删除。