首页 新闻 会员 周边

MFC socket创建失败,不知道原因

0
悬赏园豆:10 [待解决问题]

我正在学习孙鑫老师的VC教程,其中一个例子,我的做法和教程一致,然而我的却出错了,不知道是什么原因造成,希望大家帮忙解决,谢谢!

 

问题描述:

我在CChatApp的InitInstance函数调用AfxSocketInit函数以加载套接字库,代码如下:

 


if (!AfxSocketInit()) {
AfxMessageBox(L
"加载套接字库失败");
return FALSE;
}

 

 

然后在CChatDlg的自定义的函数InitSocket里进行创建套接字等操作,代码如下:

 

 

m_socket = socket(AF_INET, SOCK_DGRAM, 0);

if (INVALID_SOCKET == m_socket) {
MessageBox(L
"套接字创建失败");
return FALSE;
}

 

 

其它一些操作都实现后,我调试运行,却提示“套接字创建失败”,Google了很久都没解决问题,希望大家帮帮忙,谢谢!

 

 

我用的是Win7 + VS2008

问题补充: 我知道问题原因了。我将AfxSocketInit函数的调用放在了DoModal()的后面了,使得AfxSocetInit函数没有被执行到,因为m_socketf未被初始化。代码应该如下: C/C++ code //应该放在DOModa()之前调用 if (!AfxSocketInit()) { AfxMessageBox(L"加载套接字库失败"); return FALSE; } 问题已经解决。。。。 然而,解决了这一个问题,新的问题出现了:编译能通过,然而如果执行,窗口却一闪而过,没有报错。调试时,报错: Unhandled exception at 0x00000000 in Chat.exe: 0xC0000005: Access violation. 请问现在如何解决这两个问题?
Code 詩亼的主页 Code 詩亼 | 初学一级 | 园豆:195
提问于:2011-02-14 17:18
< >
分享
所有回答(2)
0

从错误代码来看,是你非法访问内存。程序访问内存是有规则的,如果试图访问违反规则的内存会被系统禁止,另外,访问不存在的地址或者越界也会出现异常。你可以手动跟踪一下,或者dump一下内存看看。

归真 | 园豆:605 (小虾三级) | 2011-02-15 08:47
的确是这样,是我创建线程时,调用ThreadProc出现了错误。
支持(0) 反对(0) Code 詩亼 | 园豆:195 (初学一级) | 2011-02-15 12:58
@Code 詩亼: 方便把代码看一下吗?
支持(0) 反对(0) 归真 | 园豆:605 (小虾三级) | 2011-02-15 13:04
0

我也遇到你前面的问题啦 按你说的做还是错误啦!!

1 // CChatApp 初始化
2
3 BOOL CChatApp::InitInstance()
4 {
5 if(!AfxSocketInit) //我放在这的,按你说的在DOmodal前
6 {
7 AfxMessageBox(_T("加载套接字失败"));
8 return FALSE;
9 }
10
11 INITCOMMONCONTROLSEX InitCtrls;
12 InitCtrls.dwSize =sizeof(InitCtrls);
13
14 InitCtrls.dwICC = ICC_WIN95_CLASSES;
15 InitCommonControlsEx(&InitCtrls);
16
17 CWinApp::InitInstance();
18
19
20
21 AfxEnableControlContainer();
22
23 CShellManager *pShellManager =new CShellManager;
24
25 SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
26
27 CChatDlg dlg;
28 m_pMainWnd =&dlg;
29 INT_PTR nResponse = dlg.DoModal();
30 if (nResponse == IDOK)
31 {
32
33 }
34 elseif (nResponse == IDCANCEL)
35 {
36
37 }
38 if (pShellManager != NULL)
39 {
40 delete pShellManager;
41 }
42 return FALSE;
43 }
艾斯曼 | 园豆:205 (菜鸟二级) | 2011-08-31 22:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册