wince用socket是不是内存会一直增加?
各位大虾好!上次发问了一次,不过问题还未能解决。
我用VS2005只写了一个监听服务器数据,并且当收到数据后,回发一句话的线程,其他功能全无,结果程序内存还会增加,郁闷~~~
如果此监听线程不接受来自服务器的命令,只在收到任何数据后回复固定的一句话时,程序内存还是会增加????
是不是socket本身在响应服务器命令后,就会自动增加程序内存(或者本该释放的socket内存不会及时释放),造成程序内存会一直增加。。。。。???!! //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;
} 程序如上,
其中
char szRecvMsg ={0};
是在起始定义的全局变量。 上面的程序会在 while(!m_exit)
中循环,当接收到服务器命令后 回复 //发送内容给客户端
serverSocket.Send("Have Receive The Msg", 50);
其他不会动作也不会响应。 用的socket 是
#include <afxsock.h> // MFC socket extensions 是wince本身内存管理有问题么?
我不接受服务器发来的任何命令,只在arm9上建立客户端一直发送数据到服务器,本程序用的内存不会增加,但是长时间一直发送会发现,wince本身内存会不断增加。。。。 难道在wince下用socket还用自己写内存管理程序么? :( 是通讯方式错误,wince下的socket不能频繁调用外部socket中断,否则引起内存泄露。
页:
[1]