18,364
社区成员




void CChatDlg::OnSend()
{
UpdateData();
Header header;
header.command=COMMAND_SEND;
header.datalen=m_sendmsg.GetLength();
pSocket->Send((char *)&header,sizeof(header));
USES_CONVERSION;
pSocket->Send(W2A(m_sendmsg),m_sendmsg.GetLength());
//在客户端的edit控件区域显示聊天信息
CString temp=_T("");
temp+=m_sendmsg;
temp+=_T("\r\n");
temp+=msg;
m_controledit.SetWindowText(temp);
}
void CServerSocket::OnAccept(int nErrorCode)
{
CClientSocket *clientsocket;
clientsocket=new CClientSocket(&m_listconnect);
this->Accept(*clientsocket);
clientsocket->pdlg=this->pdlg;
m_listconnect.push_back(clientsocket);
this->pdlg->ShowMsg(_T("connect"));
CSocket::OnAccept(nErrorCode);
}
void CClientSocket::OnReceive(int nErrorCode)
{
CHAR buff[sizeof(Header)];
memset(buff, 0, sizeof(buff));
Receive(buff,sizeof(buff)); //先接收包头
Header *header = (Header*)buff;
DWORD length = header->datalen;
BYTE type = header->command;
CHAR *message=new CHAR[length+1];//根据包头里面定义的包体长度,来接收包体
memset(message, 0, length+1);
Receive(message,length);
switch(type)
{
case COMMAND_REG:
{
Header head;
head.command=REG_SUCCESS;
head.datalen=0;
this->Send((char*)&head,sizeof(head));
}
break;
case COMMAND_LOGIN:
{
Header head;
head.command=LOGIN_SUCCESS;
head.datalen=0;
this->Send((char*)&head,sizeof(head));
}
break;
case COMMAND_SEND:
{
USES_CONVERSION;
this->pdlg->ShowMsg(A2W(message));
}
break;
default:
{
}
}
return CSocket::OnReceive(nErrorCode);
}