菜鸟学飞:用CAsyncSocket类建立聊天程序,accept时出现内存错误:(

jokering 2004-10-26 11:55:23
正在尝试用CAsyncSocket类建立一个两人聊天程序
已做好客户端,用来跟别人的服务端程序连接时正常,并可正常发送消息.
在编写服务端的过程中,前面一切还算顺利
但在用我的客户端连我的服务端时,出现错误提示窗口:
socket notification sink:chatS.exe -应用程序错误
"0x004021f0"指令引用的"0x00000170"内存。该内存不能为"written"。
……
我debug,发现是因为accept函数里这条语句不能执行:
m_sConnectSocket=new CSocket;
m_sListenSocket.Accept((CAsyncSocket &)*m_sConnectSocket);
如果将
m_sConnectSocket=new CSocket;
这条语句去掉,程序运行,但出现类似于上面的错误提示,变成该内存不能为"read"
我觉得很疑惑:一切是按照CAsyncSocket的编程模型下来的阿
怎么会这样?
希望有高手能帮助解答一下,小弟感激不尽。
初学者,存分不多,只能送上区区50,聊表心意。

对了,在debug时,客户端点击连接后,step到m_sConnectSocket=new CSocket;时
出现unhandled exception in chatS.exe:0xC0000005:access violation.
如果去掉 m_sConnectSocket=new CSocket;
则在step到m_sListenSocket.Accept((CAsyncSocket &)*m_sConnectSocket);时出现同样的错误提示。
...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stoone 2004-10-28
  • 打赏
  • 举报
回复
顶,楼主自问自答
jokering 2004-10-28
  • 打赏
  • 举报
回复
我明白啦
原来可能是我自己定义的两个类交叉引用的问题。
我chatSDlg.h中定义了一个
private:
CServerSocket m_sListenSocket;
CSocket * m_sConnectSocket;
而在SeverSocket.h中定义了一个
private:
CChatSDlg * m_pDlg;

在accept时,先是
void CServerSocket::OnAccept(int nErrorCode)
{
if (nErrorCode==0)
{//调用CChatSDlg类中的OnAccept()成员函数
m_pDlg->OnAccept();
}
}
又到chatSDlg里调用
void CChatSDlg::OnAccept()
{
m_sConnectSocket=new CSocket;
m_sListenSocket.Accept(* m_sConnectSocket);//m_testsocket);
}
这样交叉引用是否有循环定义之嫌?
望语法高手指点。

后来我把CChatSDlg里的工作给转移到ServerSocket里就ok了。
jokering 2004-10-27
  • 打赏
  • 举报
回复
谢谢两位。
前面我忘了说明,原先两个变量是这样定义的:
CSocket * m_sConnectSocket; //因为我看到accept的参数要用csocket类
CServerSocket m_sListenSocket; //CServerSocket是继承自CAsyncSocket的自定义类
但按照两位的方法改了之后,编译通过,而运行错误还是依旧
难道不是传址的问题?
:(
gdy119 2004-10-26
  • 打赏
  • 举报
回复
CAsyncSocket m_sListenSocket;
CAsyncSocket *m_sConnectSocket;
m_sConnectSocket=new CAsyncSocket;
m_sListenSocket.Accept(*m_sConnectSocket);

ywybetter 2004-10-26
  • 打赏
  • 举报
回复
应该是这样传地址的吧?

m_sConnectSocket=new CSocket;
m_sListenSocket.Accept((CAsyncSocket *)m_sConnectSocket);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧