真不好意思,我再开个贴吧,给大家加回,不过有新问题,happy_sea能不能帮回答一下,这次肯定不会搞错Winsock1.SendData发送数据大于8K时会自动分包发送,用Winsock1.getdata要怎么处理才能接收完整的数据,有代码更好了
用Winsock1.peekdata接收数据又不自动清空缓存,频繁发送数据的话缓存又会累积,请问如何清空缓存

解决方案 »

  1.   

    其实在那个帖子中朋友们的回答已经比较清楚了:
    1、发送数据大于8K时会自动分包发送,这个问题你已经明白了;
    2、接收端要用GetData处理每次DataArrival事件,从你给的代码来看你应该传送的是字符,那就把每次GetData得到的数据累加起来就行了;
    3、要善于在发送端用DoEvents,它可以把SendData后存放在缓冲区中的数据立即发送出去,不管缓冲区满没满,这样可以有效地防止数据在发送端粘在一起;
    4、最好是自己定个协议,即分包头和数据体两部分分开来发送,包头的内容包括标记包头的关键字加上数据体的大小等,也可用两个winsock控件,一个只发包头,另一个只发数据体,接收端收到完整数据后再通知发送端发送下一组数据。建议下一个文件传送的代码研究研究;
    5、不要用PeekData
      

  2.   


    我采用第4种方法,传图片(二进制数据),图片与字符串混合传送多大都没有问题。模仿的地http协议中文件上传的方法。
      

  3.   

    感谢各位回复
    我传送的是字符,里边有中文,当分包时正好碰上中文,把中文分开了,当再合并时就成了乱码,我只好用peekdata
    winsock1.peekdata data
    ....
    ....
    winsock1.getdata ss
    最后我用getdata,好像可以清空缓存,现在是没出现问题,不知这方法好不好,反正我传的数据不会很大