MFC基于对话框框架的简易飞鸽系统(三)--单发文本信息和收发文件

该博客详细介绍了基于MFC的简易飞鸽系统实现,涵盖了单发文本信息的对话窗口操作及文件的收发功能。通过UDP进行文本信息传输,TCP实现文件传输。在代码实现中,特别指出子线程无法直接更新主线程控件,需要通过发送消息给主线程来同步界面更新。
摘要由CSDN通过智能技术生成

实现过程第一篇已经写过了,这里就是具体的代码实现过程。

单发文本信息对话窗口:

单人对话窗口

选择文件对话窗口:

选择文件

接收文件:

接收文件

SecWin.h:

#pragma once
#include "afxwin.h"
#include "afxcmn.h"
#include <WinSock2.h>  
#include <stdio.h>  
#include <iostream>   

using namespace std;

#pragma comment(lib, "ws2_32.lib")   

#define UDP_PORT 12895  
#define TCP_PORT 12811 
#define WM_UPDATE_STATIC (WM_USER + 100) 
#define BUFFER_SIZE 8192 
#define FILE_NAME_MAX_SIZE 512 
// SecWin 对话框

class SecWin : public CDialog
{
	DECLARE_DYNAMIC(SecWin)

public:
	SecWin(CWnd* pParent = NULL);   // 标准构造函数
	virtual ~SecWin();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_CHATTING_DIALOG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	virtual BOOL OnInitDialog();
	DECLARE_MESSAGE_MAP()
public:
         CListBox infList; // 显示聊天记录的List Box
	// 接收普通udp信息的线程
	CWinThread * m_pThread;
	// 接收tcp文件信息的线程
	CWinThread * recvFileThread;
	// 发送tcp文件信息的线程
	CWinThread * sendFileThread;
	static UINT ThreadFunction(LPVOID pParam);
	static UINT RecvFileThread(LPVOID pParam);
	static UINT SendFileThread(LPVOID pParam);
	afx_msg LRESULT OnUpdateStatic(WPARAM wParam, LPARAM lParam);
	afx_msg void OnBnClickedSendMsg();
	std::string client_name; // 进行对话的主机名
	std::string client_ip; // 进行对话的主机IP
	CStatic friend_name;
	CFont cfont;// 自定义的字体
	afx_msg void OnClose();
	CButton btn_recvFile;
	CButton btn_rejectFile;
	afx_msg void OnBnClickedReceiveFile();
	afx_msg void OnBnClickedRejectFile();
	afx_msg void OnBnClickedSendFile();
	void SendIPAndFileName(CString inf);
};

SecwWin.cpp:

子线程不能更新主线程控件,只能发送一个消息主线程,然后主线程再更新界面控件

// SecWin.cpp : 实现文件
//

#include "stdafx.h"
#include "FeiGe.h"
#include "FeiGeDlg.h"
#include "SecWin.h"
#include "afxdialogex.h"
#include <vector>
#include "string"
#include <tchar.h>

// 发送文件的主机ip
static CString host_ip ;
// 发送的文件名
static CString send_file_name ;
// 接收的文件名
static CString recv_file_name;
// SecWin 对话框

IMPLEMENT_DYNAMIC(SecWin, CDialog)

SecWin::SecWin(CWnd* pParent /*=NULL*/)
	: CDialog(IDD_CHATTING_DIALOG, pParent)
{

}

SecWin::~SecWin()
{
}

void SecWin::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_HISTORY, infList);
	DDX_Control(pDX, IDC_FRIEND_NAME, friend_name);
	DDX_Control(pDX, IDC_RECEIVE_FILE, btn_recvFile);
	DDX_Control(pDX, IDC_REJECT_FILE, btn_rejectFile);
}


BEGIN_MESSAGE_MAP(SecWin, CDialog)
	
	ON_BN_CLICKED(IDC_SEND_MSG, &SecWin::OnBnClickedSendMs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值