java - Python(服务器)和Java(客户端)之间的TCP Socket发生了意外的分包和粘连
问题描述
当我同事的Java(Client) TCP socket程序向我的Python(Server) TCP socket程序发送一个包(500KB~1MB)时,存在分包和粘连的情况。我想知道,这种情况是否有普遍有效的解决方案?在这种情况下人们通常会做什么?我认为如果可以手动刷新套接字函数recv(buffer_zone)请求的缓冲区。如果我能做到这一点,程序至少不会粘包。
解决方案
是我,我用头尾包模式解决了这个问题。
具体地,客户端在向服务器发送一串数据时,可以发送包含戳信息和数据长度的头包。服务端收到客户端发来的头包后,就可以知道客户端要发给服务端的长度,服务端可以为传入的数据准备相同长度的缓存。当客户端向服务端发送尾部(数据)包时,服务端可以根据其预先知道的数据长度,将数据取出。这就是我现在的解决方案。
推荐阅读
- php - Can't get an array returning from a class function
- google-cloud-platform - 如何在文件列表上使用 gsutil rsync
- lua - 错误:[字符串“LuaVM”]:219:尝试索引零值(全局“数学”)
- c# - 内部带有另一个 lambda 的 Lambda IfThenElse 表达式(用于 SetQueryFilter())
- python - 正则表达式在单词和标点符号之间添加 NOT
- lambda - 方法中与其参数引用之一相同的引用指的是参数正确吗?
- r - scala 将集合组合为一维集合
- r - R:计数组内的观察次数
- python - 如何在运行下一行代码之前更新 Tkinter 标签文本?
- php - 从 Yii2 中的相关表中订购一个表