使用IP多播发送文件报错First-chance exception in XXX.exe (KERNEL32.DLL): oxcoooooo5 Access
最近在写一个通过ip多播发送文件的小程序
我的发送函数如下:
{
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"Worksheet Files (*.xls)|*.xls|All Files (*.*)|*.*||",NULL);
filedlg.m_ofn.lpstrTitle="选择导入文件清单";//弹出的对话框的标题
CString sFile;
TCHAR szFilePath[MAX_PATH+1];
GetModuleFileName(NULL,szFilePath,MAX_PATH);
(_tcsrchr(szFilePath,_T('\\')))[1]=0;
sFile=szFilePath;
sFile=sFile+"分支连接关系表.txt";
filedlg.m_ofn.lpstrInitialDir=sFile;
if(filedlg.DoModal()==IDOK)
{
CString filename;
filename=filedlg.GetPathName();
CFile file(filename,CFile::modeRead|CFile::shareDenyWrite);
byte *buffer=NULL;
long count=file.GetLength();//得到文件以字节为单位的大小
buffer= new byte[count];//申请内存区域用于读取的文件内容的存放
file.Read(buffer,count);//读取文件中的内容
int nReturnCode = sendto(m_hGroupSocket, (char*)&buffer,count, 0,
(sockaddr*)&srcaddr, sizeof(sockaddr));
if(nReturnCode == SOCKET_ERROR){
AfxMessageBox("Error in send packets to the network!\n");
return ;
}
file.Close();//发送问文件以后关闭文件
}
}
接收函数如下:
{
byte *buffer=NULL;
buffer= new byte[1024];
int nAddrLen=sizeof(From);
int nRet=recvfrom(m_hGroupSocket,(char*)&buffer, 1024,0,(sockaddr*)&From,&nAddrLen);
CFile m_file;
CString tt=_T("D:\\连接关系表.txt");
if(m_file.Open(tt,CFile::modeWrite|CFile::modeCreate)==FALSE)
{
AfxMessageBox("Failed to open the file!");
m_file.Close();
}
m_file.Write(buffer,1024);
m_file.Close();//将接收到的文件写入新文件
}
发送的是1KB的TXT文件,接收缓冲区比发送缓冲区大,可以接收到正确的文件但是会弹出异常
First-chance exception in XXX.exe (KERNEL32.DLL): oxcoooooo5 Access Violation
问题出在接收函数上 因为我把接收函数的recvfrom()注释掉就不会有这个问题 但是不知道该如何解决,请大家帮忙看一下,感激不尽啊
call stack 输出如下
KERNEL32 ! 7C809832()
CCOMUNICATIONDlg::MSG::~MSG()+40byte
CCOMUNICATIONDlg::Receive()line679+39byte
554d4f00()
有知道的大神帮忙看看吧,提点思路也行,菜鸟找bug好困难啊
[解决办法]
buffer分配1025个字节,同时初始化为0
[解决办法]
recvform函数的参数都有效吗?Debug下调试看看~