mfc下socket通讯中,有一段代码看不懂,跪求诸位大侠
mfc下socket通讯中,有一段代码看不懂,跪求各位大侠?
服务端的:
问题就是:当有客户端消息时,客户端和服务端通讯正常的,在服务端会自动弹出客户端的消息嘛?
------解决思路----------------------
你使用的消息是阻塞方式工作,如果你需要在服务端,显示得到的客户消息,可使用CEdit控件或静态文本控件。
------解决思路----------------------
设断点查返回的错误码
------解决思路----------------------
你用的CSocket类?你客户端有Send消息过来的时候,你服务器程序的OnReceive()函数有响应没?
服务端的:
void CClientSocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
((CserversocketDlg *)(AfxGetApp()->m_pMainWnd))->GetSocketMsg(this);
CSocket::OnReceive(nErrorCode);
}
void CserversocketDlg::GetSocketMsg(CClientSocket *psocket)
{
BOOL msgend=FALSE;
CString msg;
char msgbuf[100];
int sizebuf=100;
msg.Empty();
do
{
strcpy_s(msgbuf,"");//把第二个参数复制给第一个参数
int lengh=psocket->Receive(msgbuf,sizebuf);
if (lengh<100&&lengh>0)
{
msgend=TRUE;
}
msgbuf[lengh]=0;
msg+=msgbuf;
} while (!msgend);
AfxMessageBox(_T("接受客户端消息")_T("服务器程序"));
m_clientinfo+=msg;
UpdateData(false);
}
void CserversocketDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
if (!m_socketlist.IsEmpty())
{
UpdateData();
POSITION pos;//position的用法就是指向下一个节点
CClientSocket *socket=(CClientSocket *)m_socketlist.GetHead();
for (pos=m_socketlist.GetHeadPosition();pos!=NULL;)
{
socket=(CClientSocket *)m_socketlist.GetNext(pos);
socket->Send(LPCTSTR(m_serverinfo),1000);
}
}
else
{
AfxMessageBox(_T("未建立socket连接")_T("服务器程序"));
}
//CDialogEx::OnOK();
}
问题就是:当有客户端消息时,客户端和服务端通讯正常的,在服务端会自动弹出客户端的消息嘛?
------解决思路----------------------
你使用的消息是阻塞方式工作,如果你需要在服务端,显示得到的客户消息,可使用CEdit控件或静态文本控件。
------解决思路----------------------
设断点查返回的错误码
------解决思路----------------------
你用的CSocket类?你客户端有Send消息过来的时候,你服务器程序的OnReceive()函数有响应没?