孙鑫老师的第十五课的视频
中BOOL CChatDlg::InitSocket()
{
  m_socket=socket(AF_INET,SOCK_DGRAM,0);
 if(INVALID_SOCKET==m_socket)
  {
  MessageBox("套接字创建失败!");
  return FALSE;
  }
  SOCKADDR_IN addrsock;
  addrsock.sin_family=AF_INET;
  addrsock.sin_port=htons(5000);
  addrsock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  int retval;
  retval=bind(m_socket,(SOCKADDR*)&addrsock,sizeof(SOCKADDR));
  if(SOCKET_ERROR==retval)
  {
  closesocket(m_socket);
  MessageBox("绑定失败!");
  return FALSE;
  }
  return TRUE;
}
运行时弹出套接字创建失败   求高手指点
ps:本人用的是MFC
还有用的是校园网
怎么办?

解决方案 »

  1.   

    if(INVALID_SOCKET==m_socket)
      {
    MessageBox("套接字创建失败!");
    return FALSE;
      }这MessageBox后面加以下代码:int nCodeError=::GetLastError();CString s;
    s.Format("%d",nCodeError);
    MessageBox(s,MB_OK);
    return false;
    //捕捉错误原因!!
      

  2.   

    有没有加这段代码啊
    #include <Winsock2.h>
    #pragma comment(lib,"Ws2_32")
    WSADATA wsaData;
    WORD version=MAKEWORD(2,0);
    int ret=WSAStartup(version,&wsaData);
    if(ret!=0) 
    {
    MessageBox("Init  Error");
    return FALSE;
    }
      

  3.   

    捕捉nCodeError这个值后,然后上网查询 GetLastError返回值大全,查询错误原因,然后针对错误排除错误
      

  4.   

    晕,返回0的意思是操作成功!!!
    按照King_hhuang的办法尝试一下
      

  5.   

    if(!AfxSocketInit())
    {
    AfxMessageBox("加载套接字失败!");
    return FALSE;
    }
    用MFC的函数的
    0是成功  怎么会这样
      

  6.   

    addrsock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    的意思是 在外网上吧?你在自己的机子上,可以用"127.0.0.1"  表示本机啊addrsock.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
      

  7.   

    还是没有用
    效果一样
    我使用的是AfxSocketInit()
      

  8.   

    addrsock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    不是表示来自所有的IP消息都可以接受吗?
      

  9.   

    不清楚,我也很菜,我看过一本书上INADDR_ANY是指外网上,不过按照你的意思来说,还没到初始化地址的时候就已经创建套接字出错了!!
      

  10.   


    UINT CMySocket::InitSocket()
    {
    WORD wVersionRequested;
    WSADATA wsadata; wVersionRequested = MAKEWORD(2,2);

    int nErrCode;
    nErrCode = WSAStartup(MAKEWORD(2,2),&wsadata);

    if (0 != nErrCode)
    {
    //没有找到可用的套接字
    MessageBox(NULL,"没有找到可用的DLL","初始化失败",MB_OK);
    }
    socket1 = socket(AF_INET,SOCK_DGRAM,0);
    ZeroMemory(buf,1024);
    sockaddr_in1.sin_addr.s_addr=inet_addr("127.0.0.1");
    sockaddr_in1.sin_family=AF_INET;
    sockaddr_in1.sin_port=htons((short)8000);
    return 0;
    }这是用另一种方法初始化,发送方下面是接收方int MySocket::InitSocket()
    {
    WORD wVersionRequested;
    WSADATA wsadata; wVersionRequested = MAKEWORD(2,2);

    int nErrCode;
    nErrCode = WSAStartup(MAKEWORD(2,2),&wsadata);

    if (0 != nErrCode)
    {
    //没有找到可用的套接字
    //MessageBox(NULL,"没有找到可用的DLL","初始化失败",MB_OK);
    }
    sockaddr_in1.sin_addr.s_addr=htonl(INADDR_ANY);
    sockaddr_in1.sin_family=AF_INET;
    sockaddr_in1.sin_port=htons((short)8000); nClientLen = sizeof(sockaddr_in1); socket1 = socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(SOCKADDR*)&sockaddr_in1,nClientLen);
    return 0;
    }
      

  11.   

    m_socket=socket(AF_INET,SOCK_DGRAM,0); 在这句之前加上加载套接字库内容:if(!AfxSocketInit)
    {
      AfxMessageBox("加载套接字库失败!");
      return FALSE;
    }
    在创建套接字之前加载套接字库才不会出现问题!