为什么我的onreceive有时能触发,有时又不行呢,请高手帮忙看看,
开始监听的函数:
m_pListeningSocket=new CListeningSocket(this);
if(!m_pListeningSocket->Create(8080,SOCK_STREAM,NULL))
{return;
}
m_pListeningSocket->Bind(8080,"127.0.0.1");
while(!m_pListeningSocket->Listen())
{
}
建立连接的函数:
void CListeningSocket::OnAccept(int nErrorCode)
{
if(nErrorCode==0){
HelpListen(this);
}
else{
}
CSocket::OnAccept(nErrorCode);
}
void CListeningSocket::HelpListen(CListeningSocket *pLSocket)
{
//创建新的套接字
m_pConnectSocket=new CConnectSocket();
int nLengthAddr=sizeof(SOCKADDR_IN);
//将监听套接字监听的客户转到新的套接字中
//并把客户地址信息保存到ClientSockAddr中
if (Accept(*m_pConnectSocket,(LPSOCKADDR)&ClientSockAddr,&nLengthAddr)==0)
AfxMessageBox( "新的套接字获取失败!");
//选择网络事件
m_pConnectSocket->AsyncSelect(FD_READ);
//HQ:向客户端发送信息,以完成握手
m_pConnectSocket->Send("Message From SDN Server",30);
//创建新线程指针,接收客户请求的套接字句柄转移到新线程中
m_pConnectThread=new CConnectThread(m_pConnectSocket->m_hSocket,m_pDFSView);
m_threadList.AddTail(m_pConnectThread);
m_addressList.AddTail(inet_ntoa(ClientSockAddr.sin_addr));
m_pConnectThread->ConnectSocket.bRunning=TRUE;
if (m_pConnectThread->CreateThread()==0)
AfxMessageBox("创建新的线程失败!");
m_pConnectSocket->Detach();
////AfxMessageBox("新的socket连接创建成功! ");
delete m_pConnectSocket;
//AfxMessageBox("成功创建新的接收线程,等待数据发送!");
//DLX:关于socket缓冲区的测试
while (1)
{
iRet = Receive(m_Buffer,2000) ;
if (iRet<=0) break ;
recv(s,m_Buffer,len,NULL);
}
}
数据接收的函数:
void CConnectSocket::OnReceive(int nErrorCode)
{ do
{
if(nErrorCode!=0)
return;
if (m_nRecByte=Receive(rx_buf,100))
{
//临界区对象锁定
cs.Lock();
if (rx_buf[m_nRecByte-1]!='/0')
rx_buf[m_nRecByte] = '/0';
//将接收数据加入日志文件
g_strFusionData=rx_buf;
//数据处理。。
cs.Unlock();
}
else
{
//HQ:接收错误
//HQ:写入日志文件
...
return;
}while(m_nRecByte>0);
}
问题是在上面,请高手指教是哪里出了问题啊,