C++ Socket服务端绑定的问题
WSADATAwsadata;WORDSockVersion=MAKEWORD(1,1);if(WSAStartup(SockVersion,&wsadata)!=0){...
WSADATA wsadata;
WORD SockVersion = MAKEWORD(1,1);
if(WSAStartup(SockVersion,&wsadata) != 0)
{
return;
}
m_listenSock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(m_listenSock == INVALID_SOCKET)
{
TRACE(_T("create socket fail"));
return FALSE;
}
char szip[50];
memset(szip,0,50);
wcstombs(szip, strIp, strIp.GetLength() * 2);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(nPort);
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);/*ntohl(inet_addr(szip))*/;
if (bind(m_listenSock,(LPSOCKADDR)&sin,sizeof(sin) == SOCKET_ERROR))
{
char error[10];
int errorcode=WSAGetLastError();
itoa(errorcode,error,10);
TRACE(error);
CloseSocket();
TRACE(_T("bind socket fail"));
return FALSE;
}
运行显示bind失败,错误号10014,我查询10014表示IP不正确,我将IP设置改为 htonl(INADDR_ANY)依然bind错误。
求大牛帮助 展开
WORD SockVersion = MAKEWORD(1,1);
if(WSAStartup(SockVersion,&wsadata) != 0)
{
return;
}
m_listenSock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(m_listenSock == INVALID_SOCKET)
{
TRACE(_T("create socket fail"));
return FALSE;
}
char szip[50];
memset(szip,0,50);
wcstombs(szip, strIp, strIp.GetLength() * 2);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(nPort);
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);/*ntohl(inet_addr(szip))*/;
if (bind(m_listenSock,(LPSOCKADDR)&sin,sizeof(sin) == SOCKET_ERROR))
{
char error[10];
int errorcode=WSAGetLastError();
itoa(errorcode,error,10);
TRACE(error);
CloseSocket();
TRACE(_T("bind socket fail"));
return FALSE;
}
运行显示bind失败,错误号10014,我查询10014表示IP不正确,我将IP设置改为 htonl(INADDR_ANY)依然bind错误。
求大牛帮助 展开
1个回答
展开全部
if (bind(m_listenSock,(LPSOCKADDR)&sin,sizeof(sin) == SOCKET_ERROR))
你这句有问题 括号打错地了
if (bind(m_listenSock,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
你错了这个地会使这个
sizeof(sin) == SOCKET_ERROR先计算很明显不成立 值为0
bind的第三个参数 变成0 而不是你想要的 sizeof(sin) 也就是转成网络字节序的IP只有0个字节 那你的IP怎么对得了
你这句有问题 括号打错地了
if (bind(m_listenSock,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
你错了这个地会使这个
sizeof(sin) == SOCKET_ERROR先计算很明显不成立 值为0
bind的第三个参数 变成0 而不是你想要的 sizeof(sin) 也就是转成网络字节序的IP只有0个字节 那你的IP怎么对得了
更多追问追答
追问
int bind(SOCKET s,const struct sockaddr FAR *name,int namelen);
这是MSDN上面提供的方法。我上面的调用是没问题的。而且sizeof(sin)我单独运算值为16。我按照你的方法就编译不过。
这样,你把邮箱给我,我发你邮箱,帮我看看。
追答
你那个括号肯定是打错地方了 你再仔细看看吧 ,我都放假了。下午就走了。。。。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询