本帖最后由 VisualEleven 于 2011-12-14 11:35:43 编辑

解决方案 »

  1.   

    这样做不对的。
    首先sClient只是一个接收SOCKET,你应该再建立一个SOCKET数组如,ArrSocket,用来存放接收后的SOCKET。
    比如,你第一次接收到的sClient,然后ArrSocket[0] = sClient;
    以后一直是这样。将以前的接收SOCKET存起来。要不然就会出现你现在的情况,因为接收后,SOCKET被覆盖了。
      

  2.   

    之前没有对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;
      

  3.   

    要保存accept接收到的句柄, 你与客户端的操作是通过该句柄进行的
      

  4.   


    你是说sClient   这个值吗?我是保存到数组里面的,不过代码里面没有写出来,关键是执行accept(s,   (sockaddr   *)&sockAddr,&nAddr); 这个函数后就会使得我定义的所有变量都被修改了,不知道是那里引起的内存溢出
      

  5.   

    教你一个办法,当你的m_s创建好了之后,新增一个内存陷阱断点,把m_s的地址给进去,监控4个字节。当这个地址的数据被改写的时候,就会触发断点,你就看得到在哪儿改你的值了。