📄 testclientdlg.cpp
字号:
// TestClientDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TestClient.h"
#include "TestClientDlg.h"
#include <afxsock.h>
#include<connmgr.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestClientDlg dialog
CTestClientDlg::CTestClientDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestClientDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestClientDlg)
m_remoteHost = _T("");
m_remotePort = 0;
m_sendData = _T("");
m_recvData = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTestClientDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestClientDlg)
DDX_Text(pDX, IDC_EDTREMOTEHOST, m_remoteHost);
DDX_Text(pDX, IDC_EDTREMOTEPORT, m_remotePort);
DDX_Text(pDX, IDC_EDTSENDDATA, m_sendData);
DDX_Text(pDX, IDC_EDTRECV, m_recvData);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestClientDlg, CDialog)
//{{AFX_MSG_MAP(CTestClientDlg)
ON_BN_CLICKED(IDC_BTNCONN, OnBtnconn)
ON_BN_CLICKED(IDC_BTNDISCONN, OnBtndisconn)
ON_BN_CLICKED(IDC_BTNSENDDATA, OnBtnsenddata)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestClientDlg message handlers
BOOL CTestClientDlg::OnInitDialog()
{
//m_bFullScreen = FALSE;
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
//初始化输入值
m_remoteHost = GetLocalIP();
//m_remoteHost=_T("125.121.210.37");
//m_remoteHost=_T("192.168.0.191");
m_remotePort = 6000;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
void CALLBACK CTestClientDlg::OnDisConnect(CWnd* pWnd)
{
CTestClientDlg * pDlg = (CTestClientDlg*)pWnd;
CStatic * pStatus = (CStatic *)pDlg->GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(_T("连接断开"));
/*设置按钮可用属性*/
CButton * pBtnConn =(CButton*)pDlg->GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)pDlg->GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)pDlg->GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(TRUE);
pBtnDisConn->EnableWindow(FALSE);
pBtnSendData->EnableWindow(FALSE);
}
void CALLBACK CTestClientDlg::OnRead(CWnd* pWnd,const char * buf,int len )
{
CTestClientDlg *pDlg=(CTestClientDlg*)pWnd;
CEdit *pEdtRecv=(CEdit*)pDlg->GetDlgItem(IDC_EDTRECV);
ASSERT(pEdtRecv!=NULL);
CString strRecv=buf;
//show data
pEdtRecv->SetWindowText(strRecv);
}
void CALLBACK CTestClientDlg::OnError(CWnd* pWnd,int nErrorCode)
{
AfxMessageBox(_T("客户端socket发生错误"));
}
void CTestClientDlg::OnBtnconn()
{
UpdateData(TRUE);
//建立GPRS连接
CWaitCursor *waitCursor=new CWaitCursor();
GUID guidNetworkObject = {0};
memset ( &guidNetworkObject, 0, sizeof(GUID) );
int nIndex = 0;
HRESULT hResult = ConnMgrMapURL ( _T("http://125.121.210.37:6000"), &guidNetworkObject, (DWORD*)&nIndex );
if ( FAILED(hResult) )
{
nIndex = -1;
DWORD dwLastError = GetLastError ();
AfxMessageBox ( _T("Could not map a request to a network identifier") );
return;
}
//GUID guidNet = {0x436ef144, 0xb4fb, 0x4863, 0xa0, 0x41, 0x8f, 0x90, 0x5a, 0x62, 0xc5, 0x72};
BOOL bConn=m_ConnectManager.EstablishConnection(guidNetworkObject);
//waitCursor->Restore();
if (!bConn)
{
AfxMessageBox ( _T("GPRS Connection net failed") );
return;
}
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"GPRS连接成功");
pStatus->UpdateWindow();
UpdateData(FALSE);
//设置m_tcpClient属性
m_tcpClient.m_remoteHost = m_remoteHost;
m_tcpClient.m_port = m_remotePort;
m_tcpClient.OnDisConnect = OnDisConnect;
m_tcpClient.OnRead = OnRead;
m_tcpClient.OnError = OnError;
//waitCursor->Restore();
//建立与服务器端socket连接
if (m_tcpClient.Connect())
{
waitCursor->Restore();
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"建立连接");
UpdateData(FALSE);
//打开客户端socket
m_tcpClient.Open(this);
}
else
{
AfxMessageBox(_T("建立连接失败"));
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"连接断开");
return;
}
if (waitCursor!=NULL)
{
delete waitCursor;
waitCursor=NULL;
}
/*设置按钮可用属性*/
CButton * pBtnConn =(CButton*)GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(FALSE);
pBtnDisConn->EnableWindow(TRUE);
pBtnSendData->EnableWindow(TRUE);
}
void CTestClientDlg::OnBtndisconn()
{
if (m_tcpClient.Close())
{
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"连接断开");
CButton * pBtnConn =(CButton*)GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(TRUE);
pBtnDisConn->EnableWindow(FALSE);
pBtnSendData->EnableWindow(FALSE);
}
else
{
AfxMessageBox(_T("连接断开失败"));
}
}
void CTestClientDlg::OnBtnsenddata()
{
UpdateData(TRUE);
SendData(m_sendData);
}
void CTestClientDlg::SendData(CString strData)
{
char * sendBuf;
int sendLen=0;
sendLen = wcstombs(NULL,strData,0);
sendBuf = new char[sendLen+1];
wcstombs(sendBuf,strData,sendLen);
if (!m_tcpClient.SendData(sendBuf,sendLen))
{
AfxMessageBox(_T("发送失败"));
}
delete[] sendBuf;
sendBuf = NULL;
}
//得到本地的IP地址
CString CTestClientDlg::GetLocalIP()
{
HOSTENT *LocalAddress;
char *Buff;
TCHAR *wBuff;
CString strReturn = _T("");
//创建新的缓冲区
Buff = new char[256];
wBuff = new TCHAR[256];
//置空缓冲区
memset(Buff, '\0', 256);
memset(wBuff, TEXT('\0'), 256*sizeof(TCHAR));
//得到本地计算机名
if (gethostname(Buff, 256) == 0)
{
//转换成双字节字符串
mbstowcs(wBuff, Buff, 256);
//得到本地地址
LocalAddress = gethostbyname(Buff);
//置空buff
memset(Buff, '\0', 256);
//组合本地IP地址
sprintf(Buff, "%d.%d.%d.%d\0", LocalAddress->h_addr_list[0][0] & 0xFF,
LocalAddress->h_addr_list[0][1] & 0x00FF, LocalAddress->h_addr_list[0][2] & 0x0000FF, LocalAddress->h_addr_list[0][3] & 0x000000FF);
//置空wBuff
memset(wBuff, TEXT('\0'), 256*sizeof(TCHAR));
//转换成双字节字符串
mbstowcs(wBuff, Buff, 256);
//设置返回值
strReturn = wBuff;
}
else
{
}
//释放Buff缓冲区
delete[] Buff;
//释放wBuff缓冲区
delete[] wBuff;
return strReturn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -