【问题标题】:distinguishable socket input可区分的插座输入
【发布时间】:2011-01-27 17:58:46
【问题描述】:

我试图通过 tcp 套接字从 android 客户端向 python 服务器发送多个数据项。客户端的用户可以做出多种选择,因此我使用作为字符发送的数字来区分请求类型。我必须根据选择发送选择和特定数据。对于当前选择(在这种情况下选择 1),我需要选择和 2 个字符串字段和一个图像。我有自己的图像传输和自己的选择。我现在遇到的问题是,选择中的缓冲区读取也在紧随其后读取图像的字节流。

【问题讨论】:

    标签: java python android sockets


    【解决方案1】:

    如果在发送数据包之前写入,TCP 会将您的写入合并到一个数据包中,这意味着信息将被串联接收。

    一个常见的解决方案是在您的数据之前加入一个“操作码”。 例如,在发送您的整数之前添加前缀 CHOICE。当您在 python 脚本中阅读 CHOICE 时,您知道您正在接收一个整数,因此只读取了那么多数据。 在发送图像之前,请在其前面加上 IMG 和要读取的字节数。这样您就可以根据需要读取尽可能多的字节,然后查找下一个操作码。

    您的数据包应如下所示:CHOICE1IMG<number of bytes><image bytestream>

    显然你的操作码可以是任何你想要的,这只是一个例子。

    【讨论】:

    • 嗨,Eric,感谢您回复我。我明白你的意思,但我只是不确定最好的方法是什么?是不是把全部转换成一个大字符串,包括二进制数据并发送?
    • 我想通了。我必须限制数据字段的大小,如果它们没有填充它,则将它们填充到该大小。然后我剥离了填充服务器端来处理它。
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2011-01-31
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多