clientsock.cpp
来自「请认真阅读您的文件包然后写出其具体功能(至少要20个字)。尽量不要让站长把时间都」· C++ 代码 · 共 82 行
CPP
82 行
// ClientSock.cpp : implementation file
//
#include "stdafx.h"
#include "SreenServer.h"
#include "ClientSock.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClientSock
CClientSock::CClientSock()
{
pkbuf=NULL;
bufoffset=0;
}
CClientSock::~CClientSock()
{
if(pkbuf!=NULL)
delete []pkbuf;
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CClientSock, CSocket)
//{{AFX_MSG_MAP(CClientSock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
/////////////////////////////////////////////////////////////////////////////
// CClientSock member functions
void CClientSock::setdlg(CSreenServerDlg *d,int cid,int plen)
{
dlg=d;
id=cid;
pklen=plen;//数据包长度为固定,处理比较方便,一般为1000到65000之间.
bufoffset=0;
pkbuf=new char[plen*2];
}
void CClientSock::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
dlg->myRecvData(this);
CSocket::OnReceive(nErrorCode);
}
void CClientSock::GetPackage(char *buf)//接收一个长度为pklen的完整数据包
{
do{
recvlen=Receive(pkbuf+bufoffset,pklen,0);
if(recvlen>0)
{
bufoffset+=recvlen;
}
}while(bufoffset<pklen);//有可能(%1可能性)只接收到部分数据,就再接收一次
memcpy(buf,pkbuf,pklen);
bufoffset=bufoffset-pklen;
if(bufoffset>0)//有%99的可能性,bufoffset=0
memcpy(pkbuf,pkbuf+pklen,bufoffset);
}
void CClientSock::SendCommandData(int type, char *buf, int len)
{
NETPACKAGE pack;
pack.type=type;
pack.len=len;
memset(pack.buf,7,pklen-8);
memcpy(pack.buf,buf,len);
Send((char*)&pack,pklen,0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?