做两个小程序实现在本机的通信
本项目基于vs2019的MFC应用模块,利用TCP通信技术实现在本机的两个应用程序实现通信。
首先是建立一个MFC应用程序,了解一下它的有关操作。
应用程序类型为基于对话框,点击下一步。
这里高级功能选择一下windows套接字,我们这个程序要用到socket,来进行传输数据。
这里生成的类选择app,到时候就可以得到两个应用程序,到这里完成初始设置。
当打开vs2019时,程序默认不会帮你打开这个基于对话框的设计界面的,需要手动打开,目录在资源文件的.rc路径下的dialog文件里的IDD_文件名_dialog中。
这里我们主要介绍一下我们这次程序主要用到的三个控件:button 按钮,static text 静态文本框,edit control 文本编辑框。button按钮可以在一次点击click下,执行它下面的代码,static text主要是用于显示静态的数据,edit control可以用来用户输入数据。
拖动button控件到对话框内,查看它的属性:
caption是这个button上面所显示的文字,可以告诉使用者这个按键的功能,id是这个控件在这个程序里的名字,程序中使用都要用到它。
下面我们开始利用TCP技术来构建一个服务端和一个客户端,使这两个程序能够在相互之间进行通信。
下面给出两个程序之间的软件框图:
我们先进行服务端的构建,下面给出这个服务端程序的GUI,是利用上面提到的三个控件构成的,很简单,需要注意的是在text里的文本编辑框(edit control)中需要设置属性中的multiline为true,可以让最终显示的数据更加美观。
双击“监听”进入监听控件的编写:
// An highlighted block
void CTCPSviceDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HWND hipWnd = ::GetDlgItem(this->m_hWnd, IDC_EDIT2_ip);
char szIp[MAX_PATH] = {
0 };
::GetWindowText(hipWnd, szIp, MAX_PATH);
HWND hportWnd = ::GetDlgItem(this->m_hWnd, IDC_EDIT1_port);
char szPort[MAX_PATH] = {
0 };
::GetWindowText(hportWnd, szPort, MAX_PATH);
if (SocketBindAndListen(szIp, atoi(szPort)))
{
AddText("Listen...","{Listen}");
}
}
下面双击"发送"进行程序的编写:
// An highlighted block
void CTCPSviceDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
HWND hWnd = ::GetDlgItem(this->m_hWnd, IDC_EDIT4_send);
char szSend[MAX_PATH] = {
0 };
::GetWindowText(hWnd, szSend, MAX_PATH);
send(m_clientsock,szSend,1 + ::lstrlen