我在创建一个工程时选择了CSocket类的支持,用三层结构
服务器端和客户端用socket建立连接后,服务器端创建一个线程,在线程中读数据库
并把结果传回客户端,可就是sendmessage的时候报错,如果在主线程中读数据库,同样的操作并不报错.请高手指点
相关代码
UINT ThreadProc(LPVOID ThreadParam)
{   //////
    读数据库 
    ////
           TRY
{
// 发送消息(用户列表)
pSocket->SendMessage(&msg);//这条语句报错
Sleep(1000);
}
CATCH (CFileException, e)
{
}
END_CATCH
}
pSocket类中sendmessage函数:
void CClientSocket::SendMessage(CMsg *pMsg)
{
if (m_pArchiveOut != NULL)
{
// 对消息进行序列化
pMsg->Serialize(*m_pArchiveOut);
// 将CArchive对象中的数据强制性写入文件中
m_pArchiveOut->Flush();
}
}
pMsg->Serialize()的定义:
在线程中一序列化就出错.如果在主线程中则一切正常
void CMsg::Serialize(CArchive& ar)
{
CriticalSection.Lock();
if (ar.IsStoring())
{
ar<<(WORD)m_bClose;    
ar<<m_sPwd; // 用户登录密码
ar<<m_sFromName; // 用户登录名称
ar<<m_iDepId; // 用户所在部门id20060331
// 用户信息数组
long lSize = m_Staff.GetSize();
                     ar<<lSize;
                        for (long i = 0; i < lSize; i++)
                      {
CStaff staff = m_Staff.GetAt(i);
staff.Serialize(ar);
                       }
         }
        else
       {
WORD wd;
ar>>wd;
m_bClose=(BOOL)wd;
ar>>m_sPwd;
ar>>m_sFromName;
ar>>m_iDepId; // 用户所在部门id20060331
// 用户信息数组
long lSize;
                 ar>>lSize;
        for (long i = 0; i < lSize; i++)
        {
            CStaff staff;
            staff.Serialize(ar);
            m_Staff.Add(staff);
        }
}
CriticalSection.Unlock();
}
还有个很菜的问题:套接字可以一对多吗?就是说服务器端一个套接字对一个客户端的多个套接字进行通信?
还有?谁手上有类似的例子,帮忙给我发一个:[email protected]