为什么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);
没有看到你的程序里面有?