首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么SOCKET老是创建失败解决方案

2012-03-16 
为什么SOCKET老是创建失败////////////////////////////////////////////////m_socketsocket(AF_INET,SOC

为什么SOCKET老是创建失败
////////////////////////////////////////////////
                    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     为什么?

[解决办法]
The inet_addr function interprets the character string specified by the cp parameter

sockaddr.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 "));


如果还不行。。看下你的网络环境。申请向外连接的时候是不是被防火墙默认屏蔽了
[解决办法]
WSAGetLastEror和MessageBox的位置换一下就知道什么原因了
[解决办法]
http://blog.csdn.net/wang921718/archive/2007/09/04/1772396.aspx

看看这里我的BLOG,希望对你能有帮助!
[解决办法]
不知道你这几句写了没有?
#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib ")

WSAStartup(MAKEWORD(2,2),&wsaData);

没有看到你的程序里面有?

热点排行