总显示邦定错误,请看代码
SOCKET sock;
sockaddr_in serv;
int addlen;
///////////
serv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
serv.sin_family=AF_INET;
serv.sin_port=htons(5000);
addlen=sizeof(serv);
//创建socket
sock=socket(AF_INET,SOCK_STREAM,0);
//邦定
if(bind(sock,(LPSOCKADDR)&serv,addlen))
{
m_edit.SetWindowText("邦定错误");
}
else
{
//显示提示信息,表示服务器创建成功
m_edit.SetWindowText("服务器创建成功");
//开始侦听
listen(sock,5);
//调用线程
}
问题点数:20、回复次数:7Top
1 楼BoXoft()回复于 2006-11-04 19:48:13 得分 2
serv.sin_addr.S_un.S_addr=INADDR_ANY;
bind前添加
if(sock==INVALID_SOCKET)
{
return 0;
}
参考:http://www.codeproject.com/internet/winsockintro01.aspTop
2 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-11-05 00:14:32 得分 2
1.首先调试看看sock=socket(AF_INET,SOCK_STREAM,0);返回多少,-1表失败,检查原因
2.再看看bind返回值,msdn有对返回值的详细解释,如你的5000端口占用,换端口等等
3.bind之前先 bzero(&(serv.sin_zero), 8);Top
3 楼nuaawenlin(飘人)回复于 2006-11-05 00:32:32 得分 0
WSAGetLastError看看返回什么错误Top
4 楼sosion()回复于 2006-11-05 15:17:50 得分 0
1、采用BoXoft()的提议,发现sock就是为INVALID_SOCKET,所以程序跳出不再执行。
2、对于seu07201213提出的第二个占用端口的问题,更换若干端口,故障依旧。
3、采用nuaawenlin的提议,发现WSAGetLastError返回为10093 WSANOTINITIALISED MSDN解释为:Successful WSAStartup not yet performed.
Either the application has not called WSAStartup or WSAStartup failed. The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks), or WSACleanup has been called too many times.
英语不行,试着翻译,大意是不是:WSAStartup没有执行。没有一个程序调用WSAStartup或者其失败。程序可能访问并非它自己的当前活动的socket(也就是说,尝试在两个任务重共用一个套接字),或者WSACleanup被调用多次。
怎么来解决呢,再求高手出手。Top
5 楼BoXoft()回复于 2006-11-05 17:47:05 得分 7
还没用WSAStartup()吗?
int addlen; 后添加:
int wsaret=WSAStartup(0x101,&wsaData);
//WSAStartup returns zero on success.
//If it fails we exit.
if(wsaret!=0)
{
return 0;
}
Top
6 楼jbleak(bleak)回复于 2006-11-06 10:59:27 得分 7
可以看出来时socket()这里就没有成功。
很可能是没有WSAStartup!Top
7 楼star119119(叔叔阿姨大爷大妈,您的帖该结了吧!)回复于 2006-11-06 11:14:43 得分 2
serv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);<<-- error
serv.sin_addr.s_addr=htonl(INADDR_ANY);<<-- ok?Top




