////////////////////////////////////////////////
          m_socket=socket(AF_INET,SOCK_STREAM,0);
if(m_socket==INVALID_SOCKET){
MessageBox("socket error!");
int i=WSAGetLastError();
char p[8];
sprintf(p,"%d",i);
MessageBox(p);
}
else{
MessageBox("socket successful");
} SOCKADDR_IN sockaddr;
sockaddr.sin_addr .S_un .S_addr =inet_addr("192.168.0.18");
sockaddr.sin_family =AF_INET;
sockaddr.sin_port =htons(12345);
if(SOCKET_ERROR==connect(m_socket,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR))){
MessageBox("connect error!");
int i=WSAGetLastError();
char p[8];
sprintf(p,"%d",i);
MessageBox(p);
} else{
MessageBox("successful");
}
closesocket(m_socket);
return;
}
//////////////////////////
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata)){
AfxMessageBox("wsastartup error!");
return FALSE;
}
if(LOBYTE(wsadata.wVersion )!=2||
HIBYTE(wsadata.wVersion )!=2){
AfxMessageBox("wsa version error!");
WSACleanup();
return FALSE;
}
//////////////////////////////
为什么SOCKET 老是创建失败
用GetLastError() 得到的返回值都是0  为什么?

解决方案 »

  1.   

    你不会把WSAStartup。。这个东东放在后面吧
      

  2.   

    WSAStartup在哪里装载?是否保证此处成功?
    应该先调用这部分在创建socket
      

  3.   

    这个问题的解决方法 楼上的都说了,你还是给分把建议你学会使用WSAGetLastError然后找到 具体那里错了,以后也有用
      

  4.   

    WSAStartup()  源程序是在前面
    这个是从MFC对话框程序中截取的WSAStartup() 在WINAPP的 InitInstance()
    SOCKET部分 在一个 按钮的相应函数部分
      

  5.   

    The inet_addr function interprets the character string specified by the cp parametersockaddr.sin_addr .S_un .S_addr =inet_addr("192.168.0.18");
    你把他转成字节流看看sockaddr.sin_addr .S_un .S_addr =htonl(inet_addr("192.168.0.18"));
    如果还不行。。看下你的网络环境。申请向外连接的时候是不是被防火墙默认屏蔽了
      

  6.   

    WSAGetLastEror和MessageBox的位置换一下就知道什么原因了
      

  7.   

    GetLastError必须立刻调用,不能显示消息后再调用,因为AfxMessageBox也会修改LastError信息
      

  8.   

    http://blog.csdn.net/wang921718/archive/2007/09/04/1772396.aspx看看这里我的BLOG,希望对你能有帮助!
      

  9.   

    不知道你这几句写了没有?
    #include <winsock2.h> 
    #include <Ws2tcpip.h> 
    #include <stdio.h> 
    #include <stdlib.h>
    #pragma comment(lib,"ws2_32.lib") WSAStartup(MAKEWORD(2,2),&wsaData);没有看到你的程序里面有?