Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造套接字通信以最小化数据传输_Java_Python_Tcp_Byte - Fatal编程技术网

Java 构造套接字通信以最小化数据传输

Java 构造套接字通信以最小化数据传输,java,python,tcp,byte,Java,Python,Tcp,Byte,我正在从事一个项目,该项目将利用带宽受限网络(蜂窝)上的客户端设备。我不太熟悉socket通信,但我已经了解了如何使用Java作为服务器(来自教程),而Python是客户机上的语言 我将从数量有限的命令(少于50个)发送“do command”,但有时我还需要发送更长的命令集,为客户端提供未来的规则/条件。我的想法是为每个命令发送一个字节,其中一个字节表示还有更多的命令要执行。这是正确的方法吗,还是我应该继续写入套接字输出(我猜它是utf-8,如果我没有弄错的话,它是3bytes/char) 谢

我正在从事一个项目,该项目将利用带宽受限网络(蜂窝)上的客户端设备。我不太熟悉socket通信,但我已经了解了如何使用Java作为服务器(来自教程),而Python是客户机上的语言

我将从数量有限的命令(少于50个)发送“do command”,但有时我还需要发送更长的命令集,为客户端提供未来的规则/条件。我的想法是为每个命令发送一个字节,其中一个字节表示还有更多的命令要执行。这是正确的方法吗,还是我应该继续写入套接字输出(我猜它是utf-8,如果我没有弄错的话,它是3bytes/char)

谢谢你的意见,
James

UTF-8不是任何固定的字节数-一个UTF-8字符可以是1到16个字节

不要将命令视为文本,而应将它们视为最多255个整数——没有编码或字节顺序或任何东西
chr(command)
其中command是此范围内的整数,只要您不尝试显示它,它就可以正常工作,而无需担心编码问题

如果要发送最少的数据,可以,每个字节可以发送一个命令。如果您确实有64个或更少的命令,您可以使用第7位表示“另一个命令即将到来”,第8位表示“下一个字节开始一个规则/条件”


如果答案回答了您的问题,请记住单击答案旁边的复选标记以接受它。

在尝试优化网络带宽时,有两件事需要记住

第一,每次你想和对等方通话时,你必须传输大约40字节的开销。这只是IP固有的特性。试图将通信降低到一个字节通常是一种错误的经济。您应该做的是充分利用往返过程:将消息与对等方以后可能需要的尽可能多的附加数据结合起来。在一定程度上,Nagle算法已经为原始服务解决了这一问题,延迟数据包,直到对等方实际表明它准备好接收更多数据,这通常就足够了


第二点是,在典型的MTU规模下,几乎不可能设计出比使用通用压缩进行隧道传输的更节省空间的未压缩二进制协议。没有“压缩二进制http”,因为gzip ascii传输编码无论如何都会打败它。当需要考虑带宽时,请始终包括压缩。剩下的就是确保您的协议“易于”压缩

谢谢。摆脱对“文本”的思考,转而考虑字符的int值,这将有助于执行命令。