首页 > 解决方案 > Python(服务器)和Java(客户端)之间的TCP Socket发生了意外的分包和粘连

问题描述

当我同事的Java(Client) TCP socket程序向我的Python(Server) TCP socket程序发送一个包(500KB~1MB)时,存在分包和粘连的情况。我想知道,这种情况是否有普遍有效的解决方案?在这种情况下人们通常会做什么?我认为如果可以手动刷新套接字函数recv(buffer_zone)请求的缓冲区。如果我能做到这一点,程序至少不会粘包。

标签: javapythonsocketstcp

解决方案


是我,我用头尾包模式解决了这个问题。
具体地,客户端在向服务器发送一串数据时,可以发送包含戳信息和数据长度的头包。服务端收到客户端发来的头包后,就可以知道客户端要发给服务端的长度,服务端可以为传入的数据准备相同长度的缓存。当客户端向服务端发送尾部(数据)包时,服务端可以根据其预先知道的数据长度,将数据取出。这就是我现在的解决方案。


推荐阅读