CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

总显示邦定错误,请看代码

楼主sosion()2006-11-04 13:39:48 在 VC/MFC / 网络编程 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:sosion
  • BoXoft
  • seu07201213
  • BoXoft
  • jbleak
  • star119119

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo