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错误。
求大牛帮助
展开
 我来答
新人旧酒o
推荐于2016-12-03 · TA获得超过290个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:163万
展开全部
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怎么对得了
更多追问追答
追问
int bind(SOCKET s,const struct sockaddr FAR *name,int namelen);

这是MSDN上面提供的方法。我上面的调用是没问题的。而且sizeof(sin)我单独运算值为16。我按照你的方法就编译不过。

这样,你把邮箱给我,我发你邮箱,帮我看看。
追答
你那个括号肯定是打错地方了  你再仔细看看吧 ,我都放假了。下午就走了。。。。。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式