聊天程序+截屏 接收端出现异常

聊天程序+截屏 接收端出现错误
本帖最后由 VisualEleven 于 2012-11-07 13:56:02 编辑
BOOL CSK009Dlg::RecvData(CClientSocket *pSocket)
{
char BmpBuffer[24];
int nRecv = pSocket->Receive(BmpBuffer, sizeof(BITMAP), 0);
pLSSocket=pSocket;
//得到位图结构信息
BITMAP *pBitmap = (BITMAP *)BmpBuffer;
m_bmpBit.bmBits = pBitmap->bmBits;
m_bmpBit.bmBitsPixel = pBitmap->bmBitsPixel;
m_bmpBit.bmHeight = pBitmap->bmHeight;
m_bmpBit.bmPlanes = pBitmap->bmPlanes;
m_bmpBit.bmType = pBitmap->bmType;
m_bmpBit.bmWidth = pBitmap->bmWidth;
m_bmpBit.bmWidthBytes = pBitmap->bmWidthBytes;
//获得位图的数据
int size = m_bmpBit.bmWidthBytes * m_bmpBit.bmHeight;
m_pBmpData = new char[size];
char *pch =m_pBmpData;
int nBytesRec = 0;
int nBytesThisTime = 0;
do{                               //接收的内容较大采用循环接收完成为止
nBytesThisTime = pSocket->Receive(pch, size - nBytesRec, 0);
nBytesRec += nBytesThisTime;
pch += nBytesThisTime;
}while(nBytesRec < size);

这是接收端  基于异步非阻塞套接字的  当有数据到来时 响应RecvData函数 连接时没有问题 可是每次发送端发送数据后  接收端就卡死没有响应  并且提示“0x00...”指令引用的内存“0x00...” 不能为“read”。  

------解决方案--------------------
直接出错的时候用编译器打开,然后查看callstack看具体什么代码行数出错了
------解决方案--------------------
Debug下打开call stack,看函数调用堆栈,看走到哪个函数错误了?
------解决方案--------------------
我最近也在搞什么屏幕分块传输,
采用push模式,最后失败告终,里面错误太多了,找了很多错误,但是还是调试不正确,
最后今天开始写成拉模式。
建议接受的时候   设置一个包头。定义图片的大小,然后对比是否接受缓冲区时候合适。
祝你成功!
------解决方案--------------------
奔溃的时候有类似断点的黄箭头的。

打开callstack
然后向回看,可以看调用关系的。