📄 clientsocket.cpp
字号:
// ClientSocket.cpp: implementation of the CClientSocket class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SGIPGateWay.h"
#include "ClientSocket.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CClientSocket::CClientSocket()
{
mSocket = INVALID_SOCKET;
mstrIP = "";
mnPort = 0;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup( wVersionRequested, &wsaData );
}
CClientSocket::~CClientSocket()
{
WSACleanup();
}
void CClientSocket::CloseSocket()
{
if( mSocket == INVALID_SOCKET )
return;
closesocket(mSocket);
mSocket = INVALID_SOCKET;
}
BOOL CClientSocket::ConnectServer()
{
return ConnectServer(mstrIP, mnPort);
}
#include "childview.h"
BOOL CClientSocket::ConnectServer(LPCTSTR strServerIP, int nPort)
{
struct sockaddr_in sockAddr;
unsigned int addr;
mstrIP = strServerIP;
mnPort = nPort;
addr = inet_addr(strServerIP);
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(nPort);
*(int*)&(sockAddr.sin_addr) = addr;
if( sockAddr.sin_port == 0 )
{
CloseSocket();
return FALSE;
}
mSocket = socket(AF_INET, SOCK_STREAM, 0);
if( mSocket == INVALID_SOCKET )
return FALSE;
// 连接
if( connect(mSocket, (struct sockaddr*)&sockAddr, sizeof(struct sockaddr)) == SOCKET_ERROR )
{
int nret = WSAGetLastError();
CString str;
str.Format("错误:%d", nret);
if( gpView )
gpView->ShowLockMsg((char*)(LPCTSTR)str);
CloseSocket();
return FALSE;
}
// 启动接收线程
DWORD id;
CreateThread(NULL, NULL, ReadDataThread, (LPVOID)this, 0, &id);
return TRUE;
}
DWORD WINAPI CClientSocket::ReadDataThread(LPVOID lpParam)
{
CClientSocket *pClient = (CClientSocket*)lpParam;
int nRet;
while(pClient->mSocket != INVALID_SOCKET)
{
nRet = recv(pClient->mSocket, (char *)pClient->mBuffer, sizeof(pClient->mBuffer), 0);
if( nRet <= 0 )
{
nRet = WSAGetLastError();
pClient->CloseSocket();
pClient->OnError(nRet);
break;
}
pClient->OnReceiveData(pClient->mBuffer, nRet);
}
return 0;
}
void CClientSocket::OnError(int nErrorCode)
{
}
int CClientSocket::Send(BYTE *lpBuffer, int nSize)
{
int nRet = send(mSocket, (char *)lpBuffer, nSize, 0);
if( nRet == 0 )
{
CloseSocket();
OnError(-1);
}
if( nRet < 0 )
{
nRet = WSAGetLastError();
CloseSocket();
OnError(nRet);
}
return nRet;
}
int CClientSocket::OnReceiveData(BYTE *lpBuffer, int nSize)
{
return 0;
}
BOOL CClientSocket::SetSocket(SOCKET skt)
{
if( mSocket != INVALID_SOCKET )
return FALSE;
mSocket = skt;
return TRUE;
}
SOCKET CClientSocket::GetSocket()
{
return mSocket;
}
BOOL CClientSocket::IsConnected()
{
if( mSocket == INVALID_SOCKET )
return FALSE;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -