📄 tcpclientdlg.cpp
字号:
// TcpClientDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TcpClient.h"
#include "TcpClientDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTcpClientDlg dialog
CTcpClientDlg::CTcpClientDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTcpClientDlg::IDD, pParent)
, m_bClientConnected(FALSE)
, m_psockClient(NULL)
, m_nPortRemote(1234)
, m_strRemoteIP(_T("192.168.1.123"))
{
//m_pParent=pParent; //父窗口参数传递
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTcpClientDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_CLIENT_LOG, m_ctrlEditClientLog);
DDX_Text(pDX, IDC_EDIT_PORT_REMOTE, m_nPortRemote);
DDX_Text(pDX, IDC_EDIT_IP_REMOTE, m_strRemoteIP);
DDV_MinMaxInt(pDX, m_nPortRemote, 1, 65536);
}
BEGIN_MESSAGE_MAP(CTcpClientDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_CONNECT, &CTcpClientDlg::OnBnClickedConnect)
ON_BN_CLICKED(IDC_CLEAR_CLIENT_LOG, &CTcpClientDlg::OnBnClickedClearClientLog)
ON_BN_CLICKED(IDC_CLEAR_SEND, &CTcpClientDlg::OnBnClickedClearSend)
ON_BN_CLICKED(IDC_SEND, &CTcpClientDlg::OnBnClickedSend)
END_MESSAGE_MAP()
// CTcpClientDlg message handlers
BOOL CTcpClientDlg::OnInitDialog()
{
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
// TODO: Add extra initialization here
m_psockClient=new CTCPSocket(TCP_SOCKET_CLIENT);
return TRUE; // return TRUE unless you set the focus to a control
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CTcpClientDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_TCPCLIENT_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_TCPCLIENT_DIALOG));
}
#endif
void CTcpClientDlg::OnBnClickedConnect()
{
if(!m_bClientConnected)
{
CString Port;
UpdateData(TRUE);
//GetDlgItemText(IDC_EDIT_PORT_REMOTE,Port);
//m_nPortRemote=_wtoi(Port.GetBuffer(0));//atoi(Port.GetBuffer(0));
//GetDlgItemText(IDC_EDIT_IP_REMOTE,m_strRemoteIP);
if(m_nPortRemote<0||m_nPortRemote>65535)
{
MessageBox(L"请输入正确的端口!");
return;
}
USES_CONVERSION;
char *strIP=W2A(m_strRemoteIP);
if(!m_psockClient->Connect(strIP,m_nPortRemote))
{
MessageBox(L"连接出错!");
return;
}
if(!m_psockClient->StartReceiving(OnStatusChange,OnDataArrived,(DWORD)this))
{
MessageBox(L"启动数据接收出错!");
m_psockClient->Close();
return;
}
m_bClientConnected=TRUE;
SetDlgItemText(IDC_CONNECT,_T("断开连接"));
//更新显示
CString Status;
Status.Format(L"连接%s\r\n",m_strRemoteIP);
AddMessage(Status);
}
else
{
m_psockClient->Close();
m_bClientConnected=FALSE;
SetDlgItemText(IDC_CONNECT,_T("连接"));
}
}
void CTcpClientDlg::OnBnClickedClearClientLog()
{
SetDlgItemText(IDC_EDIT_CLIENT_LOG,L"");
m_ctrlEditClientLog.SetSel(0,0);
}
void CTcpClientDlg::OnBnClickedClearSend()
{
SetDlgItemText(IDC_EDIT_SEND,L"");
}
void CTcpClientDlg::OnBnClickedSend()
{
CString senddata;
GetDlgItemText(IDC_EDIT_SEND,senddata);
USES_CONVERSION;
char *strsend=W2A(senddata);
int nRet=m_psockClient->SendClient(strsend,strlen(strsend));//(senddata.GetBuffer(0),senddata.GetLength());
CString msg;
//更新客户端显示
if(nRet>0)
{
msg.Format(L"向%s发送%s\r\n",m_strRemoteIP,senddata.Left(nRet));
AddMessage(msg);
}
}
void CTcpClientDlg::AddMessage(LPCTSTR msg)
{
CString Message;
GetDlgItemText(IDC_EDIT_CLIENT_LOG,Message);
Message+=msg;
SetDlgItemText(IDC_EDIT_CLIENT_LOG,Message);
m_ctrlEditClientLog.SetSel(Message.GetLength(),Message.GetLength());
}
void CTcpClientDlg::OnStatusChange(char *data,int length,DWORD userdata)
{
CTcpClientDlg *pdlg=(CTcpClientDlg *)userdata;
CString Status;
if(data[0]=='C')
{
if(data[1]=='D')
{
Status.Format(L"%s断开\r\n",pdlg->m_strRemoteIP);
pdlg->AddMessage(Status);
}
}
}
void CTcpClientDlg::OnDataArrived(char *data,int length,DWORD userdata)
{
CTcpClientDlg *pdlg=(CTcpClientDlg *)userdata;
if(data[0]=='C')
{
CString Data;
CString str(data);
Data.Format(L"%s发送:",pdlg->m_strRemoteIP);
Data+=CString(data+1).Left(length-1);
Data+=L"\r\n";
pdlg->AddMessage(Data);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -