我试图编写一个很简单的网络程序:
主要代码如下:;
CMySocket的基类是CAsyncSocket
class CTSocketDlg : public CDialog
{
// Construction
public:
void OnAccept();
CMySocket m_st;
CMySocket m_sc;
CMySocket m_ss;
CTSocketDlg(CWnd* pParent = NULL); // standard constructor}void CTSocketDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
m_ss.Create (1023);
m_ss.Listen ();
MessageBox("服务器进入监听状态!");
}void CTSocketDlg::OnButton3() 
{
// TODO: Add your control notification handler code here
m_ss.Close ();
MessageBox("服务器已经关闭!");
}void CTSocketDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
m_sc.Create ();
m_sc.Connect ("hjg",1023);
MessageBox("客户机已经发出连接请求!");
}void CTSocketDlg::OnAccept()
{
   AfxMessageBox("服务器成功接受客户机连机!");
   m_ss.Accept (m_st);    ??????             
}在CMySocket类中的 OnAccept()函数里面调用Dlg类的OnAccept()函数处理连接事件,问题就出在这里:
我如果删除m_ss.Accept (m_st);程序除了不能建立一个m_ss对象之外,完全运行正常,但是如果不删除的话运行到这里的时候就会弹出那个XP中该死的对话框:遇到问题需要关闭.............
我实在每办法了!!高手们帮忙看看!!~~~

解决方案 »

  1.   

    你的m_st套接字是不是没创建就使用了。
      

  2.   

    m_ss.Accept (m_st);
    首先,你的M_ST是否已经关闭。意思是说你上次连接后,在断开连接的时候有没有关闭M_ST,若没有,肯定会出错。
    其次,CMySocket m_st,M_ST有没有用过CREATE函数而绑定了端口。你的:OnAccept()函数里面调用Dlg类的OnAccept()函数处理连接事件
    直接通过传入Dlg类的指针调用吗?
      

  3.   

    是啊,仅仅CMySocket m_st;而以,并没有Creat()啊!!
    难道m_ss.Accept (m_st)该句不就是Creat()吗??晕
      

  4.   

    m_sc是用来监听的,接受客户机连接之后用m_st来传输数据,m_sc是用来实现连机的客户端,只不过我将三个Socket放在了同一个Dlg类中了,还有我在CMySocket类中添加了一个SetParent(CDlg* pDlg)函数,用来传入Dlg类的指针!!
      

  5.   

    把CTSocketDlg窗口句柄传给CMySocket,然后在CMySocket::OnAccept中发消息给CTSocketDlg完成接受的任务。
      

  6.   

    BinaryTreeEx(狂徒(完全抵制日货),非常抱歉的告诉你,我是用的这种方法来实现的.问题绝对不是出在这里.很遗憾!!
      

  7.   

    m_sc.Connect ("hjg",1023);->
    m_sc.Connect("127.0.0.1",1023);