BOOL CChDlg::InitSocket()
{
m_socket = socket(AF_INET,SOCK_DGRAM,0);
if (INVALID_SOCKET==m_socket)
{
AfxMessageBox("失败INIT");
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port = htons(6000); int retval;

retval = bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
if (SOCKET_ERROR==retval)
{
closesocket(m_socket);
AfxMessageBox("绑定失败");
return FALSE;
}
return TRUE;
}已经使用  AfxSocketInit()成功加载套接字了,没有失败的提示
为什么这里创建失败呢,我写的是基于一个UDP的聊天程序

解决方案 »

  1.   

    WSAGetLastError();
      

  2.   

    在哪使用AfxSocketInit了?是否同在一线程空间?
      

  3.   

    你加载了Socket版本了么?使用Socket前,要先用这个WSAStartup加载
      

  4.   

    http://hi.baidu.com/galafx/blog/item/89ff5c16af175401c93d6dc8.html
    感觉和这篇文章的原因是一样的,
    我写的也是对话框程序
    ======================
    创建套接字失败2009-03-21 15:09写了一个局域网聊天程序,在创建套接字的时候总是提示创建套接字失败。研究了好久好久~~终于发现问题的所在。程序是在窗口创建的同时创建套接字的,所以套接字库一定要在创建窗口前加载。这是个很低级的错误,呵呵~ 
    ===========================================================
    这个加载放在哪里
    我放在InitInstance 里也是失败
      

  5.   

    使用 Getlasterror 就能查出来 是什么原因
      

  6.   

    使用GetLastError()的返回值使用10进制打出来是 10093
      

  7.   

    BOOL CChApp::InitInstance()
    {
    /////////////
    if(!AfxSocketInit())
    {
    AfxMessageBox("加载接字失败");
    return FALSE;
    }
    ///////////////
    }
    这里的MessageBox没有弹出来呢,应该是成功了
      

  8.   


    10093:WSANOTINITIALISED
    Winsock尚未初始化。尚未成功完成对WSAStatup的一次调用。都说了,让你初始化。
      

  9.   

    我用到了多线程,估计有啥原因。AfxSocketInit() 肯定成功了,因为他没有提示出来,难道很快有清空了?
      

  10.   

    失败原因一般都是没有初始化。WSAStartup
      

  11.   

    AfxSocketInit() 这个函数,在使用CSocket前一定要先调用该函数,否则使用CSocket会出错;并且该函数还有一个重要的使用方式,就是在某个线程下使用 CSocket 前一定要调用,就算主线程调用了该函数,在子线程下使用 CSocket 也要先调用该函数,要不会出错。
    WSAStartup是全局的,对所有线程都有用。
      

  12.   

    我以前也遇到过这个问题,郁闷了好久。你调用了AfxSocketInit()没有显示“加载套接字库失败”并不代表他就加载成功了!还有一种情况:整个if(!AfxSocketInit()){...}根本没有被执行!!该语句一定要在调用Dlg.Modal()前调用。你可以检查一下AfxSocketInit()在InitInstance()中的位置,把它放在前面就可以了。
       你可以自己调试一下,在InitInstance()和AfxSocketInit()处设置断点,单步调试验证。
      

  13.   

    16楼说得对,我把加载套接字的程序代码放在InitInstance()的最前面后就没有问题了!谢谢16楼的解答
      

  14.   

    你的问题 我刚刚也碰到,主要是AfxSocketInit()的位置问题,放在前面就没有问题了
    BOOL CChatApp::InitInstance()
    {
    AfxEnableControlContainer();
    if(!AfxSocketInit())
    AfxMessageBox("Failed to Initialize Sockets",MB_OK| MB_ICONSTOP);
                      ...