老大难有关问题,TCP接收粘包

老大难问题,TCP接收粘包
现在的情况是这样:
GPRS终端设备发送4KB大小的图片数据到服务器,会分成15-25个左右的包。
暂时的方案是:
每个包定义了文件头和尾,用逗号按数据类型分隔数据,每个包的数据包含了当前包号,总的包数量。
服务器每收到一个包就将其内部计数+1,再和包号对比,直到当前包号和总的包数量相同(成功接收到最后一个包)则将图片数据组合起来。
如果某一个接收到的包号和服务器内部计算的不匹配,则清空计数。
接收缓冲区的大小为10K

问题就来了:在我自己的电脑上用软件模拟终端图片的分包发送,没啥问题(发送和接收在同一个电脑上)。但在其他机子上发送,则似乎接收的服务器出现了粘包问题,文件头和尾错乱了。

.NET FRAMEWORK 3.5
那么求解决办法或更好的现实方案。

------解决思路----------------------
不丢包的话,为什么会慢
丢包的话,为了不慢,就直接丢弃了,那之后还能找到吗,数据整个不完整,再快有什么用