unhandled exception in *exe(MFC42D.DLL),该如何处理
unhandled exception in **.exe(MFC42D.DLL)
代码如下:
UINT MTServerThread(LPVOID pParam); //线程
//BOOL SendFile(CSocket s, CString fname);//函数声明有问题...----
BOOL SendFile(SOCKET s, CString fname);
UINT ServerThread(LPVOID pParam)
{
CString params;
char buff[512];
bool j;
HWND hDlg= FindWindow(NULL,"realserver");
CListBox *m_list = (CListBox *)GetDlgItem(hDlg,IDC_LIST1); // 在此添加额外的初始化代码
SOCKET client=(SOCKET )pParam;
params.Format("Starting up TCP server\r\n");
m_list->AddString(params);
// SOCKET实际上是一个unsigned int类型
SOCKET server;
// WSADATA结构将有WSAStartup函数来填充
WSADATA wsaData;
// 对TCP/IP 套接字来说,sockaddr_in结构指定了套接字的地址
// 其他协议使用相似的结构
sockaddr_in local;
// WSAStartup函数负责加载Winsock库的函数
// 第一个参数用来指定想要加载的Winsock库的版本
int wsaret=WSAStartup(0x101,&wsaData);
// 调用成功,WSAStartup函数返回0
// 失败的话,程序就退出
if(wsaret!=0)
{
return 0;
}
// 现在我们填充sockaddr_in结构
local.sin_family=AF_INET; // 地址家族Address family
local.sin_addr.s_addr=INADDR_ANY; // 要求使用当前主机配置的所有IP地址
local.sin_port=htons((u_short)20248); // 使用的端口
// socket函数用来创建我们的SOCKET
server=socket(AF_INET,SOCK_STREAM,0);
// 如果socket()函数调失败,我们退出
if(server==INVALID_SOCKET)
{
return 0;
}
// 为套接字关联本地地址的函数是bind.
// bind函数用在没有建立连接的套接字上,它的作用是绑定面向连接的或者无连接的套接字。
// 套接字被socket函数创建以后,存在于指定的地址家族里,但它是未命名的。
// bind函数通过安排一个本地名称到未命名的socket建立此socket的本地关联。
// 本地名称包含3个部分:主机地址、协议号(分别为UDP或TCP)和端口号。
if(bind(server,(sockaddr*)&local,sizeof(local))!=0)
{
return 0;
}
// listen函数设置套接字进入监听状态
// 为了接受连接,首先使用socket函数创建一个套接字,然后使用bind函数将它绑定到一个本地地址,
// 再用listen函数为到达的连接指定一个backlog,最后使用accept接受请求的连接。
// 函数的第二个参数是backlog值
if(listen(server,10)!=0)
{
return 0;
}
// 我们需要变量在保存客户套接字,下面是这些变量的定义
sockaddr_in from;
int fromlen=sizeof(from);
// 下面进入无限循环
while(true)
{
char temp[512];
// accept() 将接受到了的客户连接
client=accept(server,(struct sockaddr*)&from,&fromlen);
j=SendFile(client,params);
while(j=true)
{
params.Format("File sent successfully\r\n");
m_list->AddString(params);
break;
}
// 关闭客户套接字
closesocket(client);
}
// closesocket()关闭套接字,并且释放套接字描述表
closesocket(server);
// 每一个对WSAStartup的调用必须对应一个对WSACleanup的调用,这个函数释放Winsock库
WSACleanup();
return 0;
}
void CRealserverDlg::OnButton1()
{
AfxBeginThread(ServerThread,0);
}
void CRealserverDlg::OnSelchangeList1()
{
// TODO: Add your control notification handler code here
}
// int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
// {
// int nRetCode = 0;
// cout << "Press ESCAPE to terminate program\r\n";
// AfxBeginThread(ServerThread,0);
// while(_getch()!=27);
// return nRetCode;
// }
BOOL SendFile(SOCKET s, CString fname)
{
CFile f;
BOOL p=f.Open("e:\\wanna.mp3",CFile::modeRead);
char buff[1024];
int y;
int x;
if(!p)
return false;
while(true)
{
y=f.Read(buff,1024);
x=send(s,buff,y,0);
if(y<1024)
{
f.Close();
break;
代码如下:
UINT MTServerThread(LPVOID pParam); //线程
//BOOL SendFile(CSocket s, CString fname);//函数声明有问题...----
BOOL SendFile(SOCKET s, CString fname);
UINT ServerThread(LPVOID pParam)
{
CString params;
char buff[512];
bool j;
HWND hDlg= FindWindow(NULL,"realserver");
CListBox *m_list = (CListBox *)GetDlgItem(hDlg,IDC_LIST1); // 在此添加额外的初始化代码
SOCKET client=(SOCKET )pParam;
params.Format("Starting up TCP server\r\n");
m_list->AddString(params);
// SOCKET实际上是一个unsigned int类型
SOCKET server;
// WSADATA结构将有WSAStartup函数来填充
WSADATA wsaData;
// 对TCP/IP 套接字来说,sockaddr_in结构指定了套接字的地址
// 其他协议使用相似的结构
sockaddr_in local;
// WSAStartup函数负责加载Winsock库的函数
// 第一个参数用来指定想要加载的Winsock库的版本
int wsaret=WSAStartup(0x101,&wsaData);
// 调用成功,WSAStartup函数返回0
// 失败的话,程序就退出
if(wsaret!=0)
{
return 0;
}
// 现在我们填充sockaddr_in结构
local.sin_family=AF_INET; // 地址家族Address family
local.sin_addr.s_addr=INADDR_ANY; // 要求使用当前主机配置的所有IP地址
local.sin_port=htons((u_short)20248); // 使用的端口
// socket函数用来创建我们的SOCKET
server=socket(AF_INET,SOCK_STREAM,0);
// 如果socket()函数调失败,我们退出
if(server==INVALID_SOCKET)
{
return 0;
}
// 为套接字关联本地地址的函数是bind.
// bind函数用在没有建立连接的套接字上,它的作用是绑定面向连接的或者无连接的套接字。
// 套接字被socket函数创建以后,存在于指定的地址家族里,但它是未命名的。
// bind函数通过安排一个本地名称到未命名的socket建立此socket的本地关联。
// 本地名称包含3个部分:主机地址、协议号(分别为UDP或TCP)和端口号。
if(bind(server,(sockaddr*)&local,sizeof(local))!=0)
{
return 0;
}
// listen函数设置套接字进入监听状态
// 为了接受连接,首先使用socket函数创建一个套接字,然后使用bind函数将它绑定到一个本地地址,
// 再用listen函数为到达的连接指定一个backlog,最后使用accept接受请求的连接。
// 函数的第二个参数是backlog值
if(listen(server,10)!=0)
{
return 0;
}
// 我们需要变量在保存客户套接字,下面是这些变量的定义
sockaddr_in from;
int fromlen=sizeof(from);
// 下面进入无限循环
while(true)
{
char temp[512];
// accept() 将接受到了的客户连接
client=accept(server,(struct sockaddr*)&from,&fromlen);
j=SendFile(client,params);
while(j=true)
{
params.Format("File sent successfully\r\n");
m_list->AddString(params);
break;
}
// 关闭客户套接字
closesocket(client);
}
// closesocket()关闭套接字,并且释放套接字描述表
closesocket(server);
// 每一个对WSAStartup的调用必须对应一个对WSACleanup的调用,这个函数释放Winsock库
WSACleanup();
return 0;
}
void CRealserverDlg::OnButton1()
{
AfxBeginThread(ServerThread,0);
}
void CRealserverDlg::OnSelchangeList1()
{
// TODO: Add your control notification handler code here
}
// int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
// {
// int nRetCode = 0;
// cout << "Press ESCAPE to terminate program\r\n";
// AfxBeginThread(ServerThread,0);
// while(_getch()!=27);
// return nRetCode;
// }
BOOL SendFile(SOCKET s, CString fname)
{
CFile f;
BOOL p=f.Open("e:\\wanna.mp3",CFile::modeRead);
char buff[1024];
int y;
int x;
if(!p)
return false;
while(true)
{
y=f.Read(buff,1024);
x=send(s,buff,y,0);
if(y<1024)
{
f.Close();
break;