1、Socket 保证返回发送出去的数据的大小,但是 Socket 每次发送的数据量有限,并不是数据被丢失,所以你要多做一些工作,例如:int CMediaChannel::BlockRead(LPBYTE buffer, int cb)
{
int r;
int i; i = 0;
do
{
r = Read(buffer + i, cb);
if(-1 == r) break;
i += r;
cb -= r;
}while(cb > 0); return i;
}int CMediaChannel::BlockWrite(LPBYTE buffer, int cb)
{
int r;
int i; i = 0;
do
{
r = Write(buffer + i, cb);
if(-1 == r) break;
i += r;
cb -= r;
}while(cb > 0); return i;
}2、你没有接受完剩余的数据,当然会出现异常包了。3、

解决方案 »

  1.   

    2.收到消息包时异常,是说:服务方(不收1024数据包的,只收消息的),再说我在客户方的异常包收到也处理过了.<但是 Socket 每次发送的数据量有限>  是不是象有人说的那样 是读8k,写8k吗?
      

  2.   

    如果你是传输文件根本不必如此麻烦,
    如果你是传输数据,我想可能程序有问题,socket用了这么长时间,不会一个简单的消息包就会丢失,改写等(的确有这样的情况,除了线路太差)
      

  3.   

    如果没有看错的话,顶楼的使用的应该是UDP模式
      

  4.   

    gPolaris(星星之火): 如果你是传输数据,我想可能程序有问题,socket用了这么长时间,不会一个简单的消息包就会丢失,改写等(的确有这样的情况,除了线路太差)
     
    好象一上MODEM消息包就被改写,
    当然我不能保证我的程序没问题,
    问题是服务方总是在发送的开始(第一批8个数据包)会收到异常包,大小一般是正常消息包的整数倍.