各位大侠,谁来救救我,为什么我传递的句柄在OnReceive数据只能接收到一次,给出我的全部家当了
我刚学,具体如下,我想用二个线程负责接收与发送数据,在主线程中创建监听与连接对象,把句柄传递给子线程,是工作线程(不知可不可以)。第一次发送可以接收到,第二次必须再Detach和Attach一次又可收到上一次,是否我用的方法和地方不对,我刚学,另外是否CSocket传递的句柄只能在用户界面使用,另外为什么线程中循环过不取,第二次Receive就过不去,不要For就可以。各位大侠,帮帮我!
void CMyServerDlg::OnReceive()
{
m_hSocket=m_pConnectionSocket->Detach();
AfxBeginThread(OnReceiveData,LPVOID(m_hSocket));
m_pConnectionSocket->Attach(m_hSocket);
}
UINT OnReceiveData(LPVOID lparam)
{
SOCKET m_hRevSocket,m_hSocket;
m_hRevSocket=SOCKET (lparam);
CMyServerDlg *p_Dlg=(CMyServerDlg *)AfxGetApp()->GetMainWnd();
CString m_Rev;
CNewSocket m_RSocket;
m_RSocket.Create();
BOOL AttachSuccess=m_RSocket.Attach(m_hRevSocket);
char buff[1024]={0};
int ret=0;
if(AttachSuccess!=0)
{
for(;;)
{
ret=m_RSocket.Receive(buff,100);
if(ret==0)
break;
m_Rev+=buff;
ret=0;
}
m_hSocket=m_RSocket.Detach();
if(p_Dlg->m_radio ==1)
p_Dlg->GetDlgItem(IDC_EDIT_COMMAND)->SetWindowText(m_Rev);
if(p_Dlg->m_radio==2)
p_Dlg->GetDlgItem(IDC_EDIT_RECEIVE)->SetWindowText(m_Rev);
}
else
{
p_Dlg->GetDlgItem(IDC_EDIT_STATUS)->SetWindowText("网络连接错误!");
return -1;
}
m_RSocket.Close();
return 0;
}