打印

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

[复制链接]
3881|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);

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

使用特权

评论回复
5
pilieren|  楼主 | 2009-11-6 16:07 | 只看该作者
用的socket 是
#include <afxsock.h>                // MFC socket extensions

使用特权

评论回复
6
pilieren|  楼主 | 2009-11-9 09:38 | 只看该作者
是wince本身内存管理有问题么?

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

使用特权

评论回复
7
pilieren|  楼主 | 2009-11-9 09:39 | 只看该作者
难道在wince下用socket还用自己写内存管理程序么?

使用特权

评论回复
8
yuhuihui| | 2009-11-11 09:07 | 只看该作者
:(

使用特权

评论回复
9
pilieren|  楼主 | 2010-3-1 10:51 | 只看该作者
是通讯方式错误,wince下的socket不能频繁调用外部socket中断,否则引起内存泄露。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

237

帖子

3

粉丝