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、
{
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、
解决方案 »
- 不同DLL的线程之间如何通信?
- 求助:VC++ 字符数组赋给CString变量在Release版本下程序崩溃
- 如何让tip一直显示
- 求教一个关于dll加载的问题,很怪,
- 方便的鼠标右键菜单!!!
- 为什么会出现这种错误?
- 请教一个关于使用ADO的问题,出现一个莫名其妙的错误!
- 用户名和密码保存到什么地方合适?
- 在VC中我用ADO作查询时,返不回结果集。(Select * From ... Where [字段] Like "李*")只找名字为“李*”的
- 如何解决这个编译错误
- 从DLL 引处的函数 为什么在编译的时候变成了 MyFunction@23 后面的这个@23 是怎么来的!
- 如何在VC实现WIN2000一样的工具条(按纽上有图标和文字说明).最好有现在的类,谢谢帮忙!
如果你是传输数据,我想可能程序有问题,socket用了这么长时间,不会一个简单的消息包就会丢失,改写等(的确有这样的情况,除了线路太差)
好象一上MODEM消息包就被改写,
当然我不能保证我的程序没问题,
问题是服务方总是在发送的开始(第一批8个数据包)会收到异常包,大小一般是正常消息包的整数倍.