📄 clientthread.cpp
字号:
// ClientThread.cpp : implementation file
//
#include "stdafx.h"
#include "DBallGame.h"
#include "ClientThread.h"
#include "MyDef.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClientThread
IMPLEMENT_DYNCREATE(CClientThread, CWinThread)
CClientThread::CClientThread()
{
}
CClientThread::~CClientThread()
{
}
BOOL CClientThread::InitInstance()
{
m_bReceiving = 0;
ret = 0;
return TRUE;
}
int CClientThread::ExitInstance()
{
closesocket(s);
m_client->ExitInstance ();
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CClientThread, CWinThread)
//{{AFX_MSG_MAP(CClientThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClientThread message handlers
void CClientThread::StartConnect(char* lpAddr)
{
lpszServerAddr = lpAddr;
m_client = AfxBeginThread((AFX_THREADPROC)CClientThread::ConnectThrd, this);
}
UINT CClientThread::ConnectThrd(void * pParam)
{
CClientThread * pSock = (CClientThread *) pParam;
struct sockaddr_in addr;
DWORD ip=inet_addr(pSock->lpszServerAddr);
addr.sin_addr.S_un .S_addr = ip;
addr.sin_port = htons(10025);
addr.sin_family = AF_INET;
pSock->s = socket(AF_INET,SOCK_STREAM,0);
pSock->ret = connect(pSock->s,(SOCKADDR*)&addr,sizeof(addr));
if(pSock->ret == SOCKET_ERROR)
{
AfxMessageBox("connect失败");
}
pSock->m_bReceiving = 1;
pSock->ReceivingLoop ();
return 1;
//if(ret!=1)
// AfxMessageBox("send出错");
}
void CClientThread::GoLeft()
{
char *buf= "L";
ret = send(s,buf,1,0);
}
void CClientThread::GoRight()
{
char *buf= "R";
ret = send(s,buf,1,0);
}
void CClientThread::Start()
{
char *buf= "B";
ret = send(s,buf,1,0);
}
void CClientThread::ReceivingLoop()
{
CString str;
char buff[1];
while(m_bReceiving)
{
ret = recv(s,buff,1,0);
if(ret == 0||ret == SOCKET_ERROR)
{
//AfxMessageBox("recv出错");
continue;
}
switch(buff[0])
{
case GAME_BEGIN:
{
p_CDBallGameDlg->BeginGame ();
break;
}
case GAME_END:
{
p_CDBallGameDlg->Reset ();
break;
}
case GO_LEFT:
{
p_CDBallGameDlg->Bar_Above.GoLeft ();
p_CDBallGameDlg->p_Ball->SetBarPos (p_CDBallGameDlg->Bar_Above.GetPos (),BAR_ABOVE);
break;
}
case GO_RIGHT:
{
p_CDBallGameDlg->Bar_Above .GoRight ();
p_CDBallGameDlg->p_Ball->SetBarPos (p_CDBallGameDlg->Bar_Above.GetPos (),BAR_ABOVE);
break;
}
}
//str.Format ("%c",buff[0]);
//AfxMessageBox(str);
}
}
void CClientThread::Exchange (CDBallGameDlg* p)
{
p_CDBallGameDlg = p;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -