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

[复制链接]
 楼主| pilieren 发表于 2009-11-6 15:58 | 显示全部楼层 |阅读模式
各位大虾好!
     上次发问了一次,不过问题还未能解决。
     我用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[256] = {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[256] ={0};   
        sprintf(szError, "Bind Faild: %d", GetLastError());  
        AfxMessageBox(L"Bind Faild");
        return 1;
    }
        //监听
    if(!aSocket.Listen(10))
    {   
        char szError[256] ={0};
        sprintf(szError, "Listen Faild: %d", GetLastError());
        AfxMessageBox(L"Listen Faild");
        return 1;
    }

         while(!m_exit)
    {
    //接收外部连接
       if(!aSocket.Accept(serverSocket))
        {
            continue;
        }
        else
       {
            //char szRecvMsg[256] ={0};
            //char szOutMsg[256] = {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[256] ={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中断,否则引起内存泄露。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

237

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部