我的程序是每侦听到一个连接请求,就为该连接创建一个线程来完成这个连接的收发,如下:
ClientSocket是CSocket的派生类void CClientSocket::OnAccept(int nErrorCode)
{
....
Accept(m_connection[nSocket]);//m_connection是ClientSocket类型的数组
....
CConnectThread* ConnectThread;
ConnectThread=new CConnectThread();
ConnectThread->m_hSocket=(SOCKET)m_connection[nSocket].Detach();
ConnectThread->CreateThread();
}
在CWinThread的派生类ConnectThread中Attach套接字,
int CConnectThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
m_ClientSocket.Detach();
return CWinThread::ExitInstance();
}
问题: 如何得到每个线程中的ClientSocket的对象实例的指针?
因为用CArchive实现串行化时需要定义CSocketFile的对象,而且该对象必须关联到相关的Socket上,如:
CSocketFile file(/*这里就需要一个CSocket派生类的指针*/);
如果是接收的时候都好办,只要在OnReceive()里面定义:CSocketFile file(this);就可以了,但是发送的时候不知道怎么得到我想发送的那个ClientSocket的对象实例的指针.
请各位大侠帮忙分析一下,谢谢.
ClientSocket是CSocket的派生类void CClientSocket::OnAccept(int nErrorCode)
{
....
Accept(m_connection[nSocket]);//m_connection是ClientSocket类型的数组
....
CConnectThread* ConnectThread;
ConnectThread=new CConnectThread();
ConnectThread->m_hSocket=(SOCKET)m_connection[nSocket].Detach();
ConnectThread->CreateThread();
}
在CWinThread的派生类ConnectThread中Attach套接字,
int CConnectThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
m_ClientSocket.Detach();
return CWinThread::ExitInstance();
}
问题: 如何得到每个线程中的ClientSocket的对象实例的指针?
因为用CArchive实现串行化时需要定义CSocketFile的对象,而且该对象必须关联到相关的Socket上,如:
CSocketFile file(/*这里就需要一个CSocket派生类的指针*/);
如果是接收的时候都好办,只要在OnReceive()里面定义:CSocketFile file(this);就可以了,但是发送的时候不知道怎么得到我想发送的那个ClientSocket的对象实例的指针.
请各位大侠帮忙分析一下,谢谢.
ConnectThread->m_pClientSocket = m_connection[nSocket]
不就行了吗
it should be
ConnectThread->m_pClientSocket = &(m_connection[nSocket])
2) ConnectThread里有ClientSocket对象,是用来Attach socket的,这样才能把每个socket对应到每个线程啊.
3) 不能用send,因为用的是CArchive串行化收发
4) 就算是在ClientSocket中编写发送代码,但是我不知道需要发送的那个实例究竟是哪个啊.我就是想对应每个客户端IP把用于连接它的ClientSocket的实例保存起来,但是不知道在哪获取.请大家仔细分析分析.
这句不明白!