pilieren 发表于 2009-11-6 15:58

wince用socket是不是内存会一直增加?

各位大虾好!
   上次发问了一次,不过问题还未能解决。
   我用VS2005只写了一个监听服务器数据,并且当收到数据后,回发一句话的线程,其他功能全无,结果程序内存还会增加,郁闷~~~
   如果此监听线程不接受来自服务器的命令,只在收到任何数据后回复固定的一句话时,程序内存还是会增加????
   是不是socket本身在响应服务器命令后,就会自动增加程序内存(或者本该释放的socket内存不会及时释放),造成程序内存会一直增加。。。。。???!!

pilieren 发表于 2009-11-6 15:58

//TCP监听线程
UINT _ListenTcpThread(LPVOID lparam)
{
        CzkDlg *pDlg=(CzkDlg *)lparam;

        //初始化Winscok
    if (!AfxSocketInit())
        {
      AfxMessageBox(L"IDP_SOCKETS_INIT_FAILED");
      return 1;
    }
        m_exit = false;

        CSocket aSocket, serverSocket;
    //最好不要使用aSocket.Create创建,因为容易会出现10048错误
    if (!aSocket.Socket())
    {
      char szError = {0};
      sprintf(szError, "Create Faild: %d", GetLastError());
      AfxMessageBox(L"Create Faild");
      return 1;
    }
        BOOL bOptVal = TRUE;
    int bOptLen = sizeof(BOOL);
   //设置Socket的选项, 解决10048错误必须的步骤
    aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
    //绑定端口
    if (!aSocket.Bind(5000))
    {
      char szError ={0};   
      sprintf(szError, "Bind Faild: %d", GetLastError());
      AfxMessageBox(L"Bind Faild");
      return 1;
    }
        //监听
    if(!aSocket.Listen(10))
    {   
      char szError ={0};
      sprintf(szError, "Listen Faild: %d", GetLastError());
      AfxMessageBox(L"Listen Faild");
      return 1;
    }

       while(!m_exit)
    {
    //接收外部连接
       if(!aSocket.Accept(serverSocket))
      {
            continue;
      }
      else
       {
            //char szRecvMsg ={0};
            //char szOutMsg = {0};   

         //接收客户端内容:阻塞
                  //---------------------------------------------------------
            //serverSocket.Receive(szRecvMsg, 256);
                        //---------------------------------------------------------

         
                       
             //发送内容给客户端
            serverSocket.Send("Have Receive The Msg", 50);
            //关闭
            serverSocket.Close();
      }
      
    }
        //关闭
    aSocket.Close();
    serverSocket.Close();

    return 0;
}

pilieren 发表于 2009-11-6 16:00

程序如上,
其中
char szRecvMsg ={0};
是在起始定义的全局变量。

pilieren 发表于 2009-11-6 16:01

上面的程序会在 while(!m_exit)
中循环,当接收到服务器命令后 回复 //发送内容给客户端
            serverSocket.Send("Have Receive The Msg", 50);

其他不会动作也不会响应。

pilieren 发表于 2009-11-6 16:07

用的socket 是
#include <afxsock.h>                // MFC socket extensions

pilieren 发表于 2009-11-9 09:38

是wince本身内存管理有问题么?

我不接受服务器发来的任何命令,只在arm9上建立客户端一直发送数据到服务器,本程序用的内存不会增加,但是长时间一直发送会发现,wince本身内存会不断增加。。。。

pilieren 发表于 2009-11-9 09:39

难道在wince下用socket还用自己写内存管理程序么?

yuhuihui 发表于 2009-11-11 09:07

:(

pilieren 发表于 2010-3-1 10:51

是通讯方式错误,wince下的socket不能频繁调用外部socket中断,否则引起内存泄露。
页: [1]
查看完整版本: wince用socket是不是内存会一直增加?