⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpclientdlg.cpp

📁 WinCE试验-无线网络通信
💻 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 + -