使用accept接收连接导致监听的socket套接字会丢失? 本帖最后由 VisualEleven 于 2011-12-14 11:35:43 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样做不对的。首先sClient只是一个接收SOCKET,你应该再建立一个SOCKET数组如,ArrSocket,用来存放接收后的SOCKET。比如,你第一次接收到的sClient,然后ArrSocket[0] = sClient;以后一直是这样。将以前的接收SOCKET存起来。要不然就会出现你现在的情况,因为接收后,SOCKET被覆盖了。 之前没有对m_s进行过任何操作,直到运行到 sClient =accept(s, (sockaddr *)&sockAddr,&nAddr);的时候就会发现很多变量的值都被修改了,包括我初始化的一个保存套接字的数组也被修改了,不光光是m_s的值被修改了,我也觉得可能是那里内存溢出了之类的,但是总是找不到那里会导致内存溢出,而且程序总是调试到下面的代码的时候开始出现内存溢出的 FD_ZERO(&fds); FD_SET(s, &fds); //检查是否有客户端连接上来 if(FD_ISSET(s, &fds)) { nAddr =sizeof(SOCKADDR_IN); memset((void *)&sockAddr, 0x0, nAddr); sClient =accept(s, (sockaddr *)&sockAddr,&nAddr); if(sClient ==INVALID_SOCKET)//socket非法 ... }注变量定义: SOCKADDR_IN sockAddr; int nAddr; 要保存accept接收到的句柄, 你与客户端的操作是通过该句柄进行的 你是说sClient 这个值吗?我是保存到数组里面的,不过代码里面没有写出来,关键是执行accept(s, (sockaddr *)&sockAddr,&nAddr); 这个函数后就会使得我定义的所有变量都被修改了,不知道是那里引起的内存溢出 教你一个办法,当你的m_s创建好了之后,新增一个内存陷阱断点,把m_s的地址给进去,监控4个字节。当这个地址的数据被改写的时候,就会触发断点,你就看得到在哪儿改你的值了。 MFC多线程提示错误怎么解决 vc怎样把一天24小时分为3段 关于CString的奇怪的问题,不知道大家有没有遇到过? 如何编程实现把屏幕的内容拷贝下来然后在打印机上打印 怎样为MM_MCINOTIFY添加消息影射?ClassWizard里没有这条消息。帮帮忙!以后一定为贴子加分! 50分求助 为啥EnumWindows经常找不到进程窗口? 数字机顶盒中mpeg2文件的格式转换问题 有关由MFC开发的视频GIS的系统 VC++2010对摄像头的控制 求助:GDI+绘图过程太耗CPU 我想把绘制的图缓存起来(因为图形不变时不需要重复绘制) MFC的文件保存
首先sClient只是一个接收SOCKET,你应该再建立一个SOCKET数组如,ArrSocket,用来存放接收后的SOCKET。
比如,你第一次接收到的sClient,然后ArrSocket[0] = sClient;
以后一直是这样。将以前的接收SOCKET存起来。要不然就会出现你现在的情况,因为接收后,SOCKET被覆盖了。
FD_ZERO(&fds);
FD_SET(s, &fds); //检查是否有客户端连接上来
if(FD_ISSET(s, &fds))
{
nAddr =sizeof(SOCKADDR_IN);
memset((void *)&sockAddr, 0x0, nAddr);
sClient =accept(s, (sockaddr *)&sockAddr,&nAddr);
if(sClient ==INVALID_SOCKET)//socket非法
...
}注变量定义: SOCKADDR_IN sockAddr;
int nAddr;
你是说sClient 这个值吗?我是保存到数组里面的,不过代码里面没有写出来,关键是执行accept(s, (sockaddr *)&sockAddr,&nAddr); 这个函数后就会使得我定义的所有变量都被修改了,不知道是那里引起的内存溢出