本人由于工作关系,用到SOCKET通信,大致实现如下:
CXXDialog::CXXDialog()
{
... //读取配置文件;
m_pSerialLog = new CSerialLogServerSocket();
result = m_pSerialLog ->Create(5555, SOCK_DGRAM); //建立SOCKET.
if (0 == result)
{
AfxMessageBox("Serial Log Create Socket Failed!");
Close(true);
}
m_pSerialLog->Listen();
...
} CXXDialog::~CXXDialog()
{
if (NULL != m_pSerialLog)
{
delete m_pSerialLog;
m_pSerialLog = NULL;
}
} CXXDialog::SetPrintMode()
{
..... //
if(NULL == m_pSeriaLog)
{
m_pSerialLog = new CSerialLogServerSocket();
BOOL result = m_pSerialLog->Create(5555, SOCK_DGRAM);//建立SOCKET
if (0 == result)
{
bRet = FALSE;
cFlag = "OFF";
AfxMessageBox("Serial Log Create Socket Failed!");
Close(true);
}
else
{
cFlag = "ON";
m_pSerialLog->Listen();
}
}
... //
}
实现思路如下:程序开启SOCKET通信有两种方式:一是程序启动时,读取配置文件控制SOCKET开关.二是通过程序设置开启/关闭SOCKET.CSerialLogServerSocket是CAsyncSocket的派生类.现在的问题是,程序编译无问题,通过程序初始化创建的SOCKET通信没任何问题.但是通过程序设置而创建的SOCKET能正确建立成功,但是监听失败,并在析构的时,也就是调用了
m_pSerialLog->Close()时程序调出错误对话框. 请问,两部分建立SOCKET实现代码几乎一样.为什么一个成功,一个失败.难道SOCKET不能动态创建.这问题困扰我好久了,请路过的大侠帮忙看看.谢谢!.
CXXDialog::CXXDialog()
{
... //读取配置文件;
m_pSerialLog = new CSerialLogServerSocket();
result = m_pSerialLog ->Create(5555, SOCK_DGRAM); //建立SOCKET.
if (0 == result)
{
AfxMessageBox("Serial Log Create Socket Failed!");
Close(true);
}
m_pSerialLog->Listen();
...
} CXXDialog::~CXXDialog()
{
if (NULL != m_pSerialLog)
{
delete m_pSerialLog;
m_pSerialLog = NULL;
}
} CXXDialog::SetPrintMode()
{
..... //
if(NULL == m_pSeriaLog)
{
m_pSerialLog = new CSerialLogServerSocket();
BOOL result = m_pSerialLog->Create(5555, SOCK_DGRAM);//建立SOCKET
if (0 == result)
{
bRet = FALSE;
cFlag = "OFF";
AfxMessageBox("Serial Log Create Socket Failed!");
Close(true);
}
else
{
cFlag = "ON";
m_pSerialLog->Listen();
}
}
... //
}
实现思路如下:程序开启SOCKET通信有两种方式:一是程序启动时,读取配置文件控制SOCKET开关.二是通过程序设置开启/关闭SOCKET.CSerialLogServerSocket是CAsyncSocket的派生类.现在的问题是,程序编译无问题,通过程序初始化创建的SOCKET通信没任何问题.但是通过程序设置而创建的SOCKET能正确建立成功,但是监听失败,并在析构的时,也就是调用了
m_pSerialLog->Close()时程序调出错误对话框. 请问,两部分建立SOCKET实现代码几乎一样.为什么一个成功,一个失败.难道SOCKET不能动态创建.这问题困扰我好久了,请路过的大侠帮忙看看.谢谢!.
----------------------------------
得到错误代码,怎样去查错误代码的具体函意.m_pSerialLog好像没有关闭啊。
-----------------------------------------
在delete m_pSerialLog时会自动调用m_pSerialLog->Close();弹出错误对话框就是在执行这一步出现的. ---- ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL);断言错误.
SOCK_DGRAM???怎么又在Listen呢?SOCK_DGRAM=>SOCK_STREAM?
------------------------------------
????? SOCK_DGRAM 不能用Listen么?直接就可能Receive么?