📄 client.cpp
字号:
#include "stdafx.h"
#include "Client.h"
bool CClient::CodingBuff(CMsg *ptrMsg){
if(!ptrMsg)return FALSE;
m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.dwLength)),sizeof DWORD);
m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.eCmdID)),sizeof CMD_ID);
m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.dwToken)),sizeof DWORD);
if(ptrMsg->MsgHead.eCmdID == CMD_MSG_CHAT){
m_SendBuff.AddToBuffer((char*)ptrMsg->MsgChat.szSender,sizeof ptrMsg->MsgChat.szSender);
m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgChat.dwLength)),sizeof DWORD);
m_SendBuff.AddToBuffer((char*)ptrMsg->MsgChat.szContent,ptrMsg->MsgChat.dwLength);
}
else if(ptrMsg->MsgHead.eCmdID == CMD_NEW){
m_SendBuff.AddToBuffer((char*)ptrMsg->MsgNew.szUsername,sizeof ptrMsg->MsgNew.szUsername);
}
else if(ptrMsg->MsgHead.eCmdID == CMD_LOGOUT){
m_SendBuff.AddToBuffer((char*)ptrMsg->MsgNew.szUsername,sizeof ptrMsg->MsgNew.szUsername);
}
return TRUE;
}
bool CClient::DecodingBuff(CMsg *ptrMsg){
if (!ptrMsg)return FALSE;
DWORD dwPos = 0;
m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.dwLength)),dwPos,sizeof DWORD);
dwPos += sizeof DWORD;
m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.eCmdID)),dwPos,sizeof CMD_ID);
dwPos += sizeof CMD_ID;
m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.dwToken)),dwPos,sizeof DWORD);
dwPos += sizeof DWORD;
if(ptrMsg->MsgHead.eCmdID == CMD_MSG_CHAT){
m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgChat.szSender,dwPos,sizeof ptrMsg->MsgChat.szSender);
dwPos += sizeof ptrMsg->MsgChat.szSender;
m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgChat.dwLength)),dwPos,sizeof DWORD);
dwPos += sizeof DWORD;
ptrMsg->MsgChat.szContent = new wchar_t [ptrMsg->MsgChat.dwLength/2];
m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgChat.szContent,dwPos,ptrMsg->MsgChat.dwLength);
}
else if(ptrMsg->MsgHead.eCmdID == CMD_LOGIN){
m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgLogin.szUsername,dwPos,sizeof ptrMsg->MsgLogin.szUsername);
dwPos += sizeof ptrMsg->MsgLogin.szUsername;
m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgLogin.szPassWord,dwPos,sizeof ptrMsg->MsgLogin.szPassWord);
}
return TRUE;
}
CClient::CClient(int nIncrement):m_RecvBuff(nIncrement),m_SendBuff(nIncrement){
BytesRECV = 0;
BytesSEND = 0;
m_bWrite = FALSE;
m_iMsgNum = 0;
Next = NULL;
}
CClient::~CClient(){}
bool CClient::SendMsg(){
WSABUF wsaBuf;
DWORD SendBytes;
wsaBuf.buf = m_SendBuff.GetBuffer();
wsaBuf.len = m_SendBuff.GetLength();
while(BytesSEND < wsaBuf.len){
if (WSASend(m_Socket, &wsaBuf, 1, &SendBytes, 0,
NULL, NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != WSAEWOULDBLOCK)return false;
}
BytesSEND += SendBytes;
}
BytesSEND = 0;
m_SendBuff.ReSet();
return true;
}
bool CClient::RecvMsg(){
DWORD Flags=0;
char szBuff[DATA_BUFSIZE];
WSABUF wsaBuf;
DWORD RecvBytes;
while(BytesRECV != sizeof DWORD){
wsaBuf.buf = szBuff;
wsaBuf.len = sizeof DWORD-BytesRECV;
if (WSARecv(m_Socket, &wsaBuf, 1, &RecvBytes,
&Flags, NULL, NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != WSAEWOULDBLOCK)return FALSE;
}
BytesRECV += RecvBytes;
m_RecvBuff.AddToBuffer(szBuff,RecvBytes);
}
DWORD dwLength;
m_RecvBuff.GetFromBuffer((char*)(&dwLength),0,sizeof DWORD);
while(BytesRECV != dwLength){
wsaBuf.buf = szBuff;
wsaBuf.len = (dwLength-BytesRECV)/DATA_BUFSIZE ? DATA_BUFSIZE:dwLength-BytesRECV;
if (WSARecv(m_Socket, &wsaBuf, 1, &RecvBytes,
&Flags, NULL, NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != WSAEWOULDBLOCK)return FALSE;
}
BytesRECV += RecvBytes;
m_RecvBuff.AddToBuffer(szBuff,RecvBytes);
}
BytesRECV = 0;//there is some problem!
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -