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

📄 secretchatdlg.h

📁 一个用RSA算法实现加密通信的聊天程序。
💻 H
字号:
// SecretChatDlg.h : header file
//

#if !defined(AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_)
#define AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CSecretChatDlg dialog
//托盘事件
#define MYWM_NOTIFYICON  WM_USER + 1
//运行时隐藏窗口消息	
#define WM_RUNHIDE ( WM_USER + 2)		

//监听的端口号
#define LISTEN_PORT				2300
//应用程序版本号
#define APPLICATION_VERSION		1
//当前自己的通讯版本号
#define MESSAGE_VERSION			1
//密钥文件版本号
#define SECRETKEY_VERSION		1
//一次发送的数据大小,msg.n			
#define SENDFILESIZE			1024

//接收的最大消息数目
#define MESSAGE_COUNT			4
/*1位表示被用着,0位表示可以用,如果全为0就代表完全空着,全为1就代表没有空余
m_send_message_package_ID数组的索引和m_send_message_package_ID_index的位相对应,
总之有空闲的位就可以使用*/
DWORD	exponential(DWORD, DWORD a = 2);
void	bit_to_index(DWORD bit, DWORD &index, BOOL count);
DWORD	bit_to_index(DWORD bit, BOOL count);
int		get_bit_count(DWORD bit, BOOL count);
BOOL	get_bit(DWORD bit, DWORD index);
void	set_bit(DWORD &bit, DWORD index, BOOL count);


// CNoteTunnelDlg dialog
#include "RSA.h"
#include "__DWORD128.h"
#include "ListenSocket.h"
#include "BtnST.h"	// Added by ClassView
#include "Connect.h"
#include "HyperLink.h"	// Added by ClassView
#include "Setup.h"
#include "Label.h"
#include "ColorEdit.h"


class CSecretChatDlg : public CDialog
{
// Construction
public:
	CSecretChatDlg(CWnd* pParent = NULL);	// standard constructor

	//套接字用
	int		m_friend_message_version;	//对方的消息版本号
	BOOL	m_bListen;				//是否监听成功
	CConnect m_connectDlg;			//输入IP地址的对话框
	UINT	m_port;					//服务器端口号,双方约定为48501。
	CString m_IP;					//服务器IP地址
	CSocket *m_pSocket;				//客户机类对象
	CListenSocket m_socketListen;	//服务器监听的套接字对象
	BOOL	m_online;				//判断是否联机
	BOOL	m_clientOrService;		//自己用的时客户端还是服务器端
	int		m_zai_xian_biao_ji;		//在线标记
	int		SendData(MessagePackage &msg, int n);	//发送数据
	BOOL	Connect();
	BOOL	Disconnection();

	//RSA用	
//	public_key	m_public_key;
//	private_key	m_private_key;
	//接收同时处理时会并行更改requires,所以把他们分开
	public_key	m_public_key_send;
	private_key	m_private_key_send;
	public_key	m_public_key_receive;
	private_key	m_private_key_receive;
	void		MessagePackageToText(MessagePackage &package);//将消息包转化成明文
	void		TextToMessagePackage(MessagePackage &package, CString strm);//将明文strm转化成消息包
	//发送消息要保留的信息
	DWORD		m_send;										//发送的消息数目,这里最大为1
	CString		m_send_time;								//发送消息时间
	//因为消息包数组的处理方式的进出无序的,所以要用位来表示
	__DWORD128	m_send_message_package_ID[32];				//发送消息包的标识
	DWORD		m_send_message_package_ID_index;			//用它的位判断发送消息包ID的那个索引有没被使用
	/*类或结构做参数必须用引用传递,否则就会在调用它时使得内存变乱,而出现无法回复的错误*/
	int			m_send_message_package_ID_del(__DWORD128 &del);		//删除消息ID
	int			m_send_message_package_ID_find(__DWORD128 &find);	//查找
	int			m_send_message_package_ID_add(__DWORD128 &add);		//添加
	
	//接收消息要保留的信息
	int			m_receive_text_length;						//收到消息的长度
	char		m_receive_text[DATA_LENGTH];					//收到消息的正文缓冲区
	__DWORD128	m_receive_digital_ID;						//收到消息的数字标识
	__DWORD128	m_receive_message_package_ID;				//收到消息包的标识
	__DWORD128	m_receive_message_dollop_ID;				//收到所以消息块总和的标识
	CString		m_receive_time;								//收到消息时间
	MessagePackage m_receive_message_package[MESSAGE_COUNT];//为了接收时的线程能读到的发过来的消息包的数据
	CRITICAL_SECTION	m_cs_receive;						//临界区,接收多条消息有用m_cs.LockCount代表正在接收消息的数目
	long		m_receive;									//代表正在接收消息的数目,-1未没有

	BOOL		InstallPublicKey(CString fileName = "");	//安装好友公钥文件
	BOOL		InstallPrivateKey(CString fileName = "");	//安装用户私钥文件

public:
	//文件传送功能
	BOOL			m_send_file;			//判断是否接收或发送文件
	CString			m_send_file_name;		//发送的文件名
//	int				m_send_file_seek_position;	//当前发送的文件位置
	int				m_send_file_length;		//发送或接收的文件长度
	CString			m_receive_file_name;	//接收的文件名
//	MessagePackage	m_receive_file_buffer;	//接收文件的缓冲区要传给线程的呀
	HANDLE			m_send_file_thread_handle;	//线程句柄用来取消发送或接收

	//////////
	CRect		m_rect;			//窗口的位置
	CToolTipCtrl m_toolTip;		//工具提示对象
	CSetup		m_setupDlg;		//设置管理器
	CString		m_appName;		//应用程序目录名

// Dialog Data
	//{{AFX_DATA(CSecretChatDlg)
	enum { IDD = IDD_SECRETCHAT_DIALOG };
	CLabel	m_friendNameStatic;
	CLabel	m_userNameStatic;
	CEdit	m_statusMessages;
	CColorEdit	m_messageNoteEdit;
	CEdit	m_messageEdit;
	CString	m_message;
	CString	m_messageNote;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSecretChatDlg)
	public:
	virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL
public:
	CButtonST m_connect;
	CButtonST m_disconnection;
	CButtonST m_publickeymanager;
	CButtonST m_note;
	CButtonST m_send_button;
	CButtonST m_exit;
	CButtonST m_getIP;
	CButtonST m_setup;	
	CButtonST m_sendfile;

public:
	CString GetFriendIP();//对方的IP地址
	void	disconnection_message(MessagePackage &msg);
	BOOL	CuoWuTiShi();
	void	send_file_comeback_scene();
	BOOL	prevent_connect();
	void	CloseSocket();
	void	receive_file(MessagePackage &msg);
	void	connect_succeed_update();
	void	signalled_friend_version();
	void	message_version(MessagePackage &msg);
	void	set_app_alias(CString app_alias);
	void	ReceiveRevert(MessagePackage &package);
	void	InitializationWindow();
	void	send_or_receive_tip(BOOL sendOrReceive);
	CString GetFriendName();
	CString GetUserName();
	void	Receive(MessagePackage &package);
	void	TrayIcon();
	BOOL	ValidatePublicKey();
	BOOL	ValidatePrivateKey();
	BOOL	AskPublicKey();
	BOOL	ClaimPublicKey(MessagePackage &msg);
	BOOL	RevertPublicKey(MessagePackage &msg);
	BOOL	MyUpdateData();
	void	PlayWaveSound(DWORD wave);

// Implementation
protected:
	HICON	m_hIcon;
	HICON	m_hOnline;	//在线图标
	HICON	m_hOffline;	//断线图标
	// Generated message map functions
	//{{AFX_MSG(CSecretChatDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnTimer(UINT nIDEvent);
	virtual void OnOK();
	virtual void OnCancel();
	afx_msg void OnGetip();
	afx_msg void OnNote();
	afx_msg void OnSend();
	afx_msg void OnConnectDisconnection();
	afx_msg void OnSecretkey();
	afx_msg void OnSetup();
	afx_msg void OnUsername();
	afx_msg void OnFriendname();
	afx_msg void OnSendfile();
	afx_msg void OnTop();
	afx_msg void OnShow();
	afx_msg void OnHide();
	afx_msg void OnEmail();
	afx_msg void OnHomepage();
	afx_msg void OnHelp();
	afx_msg void OnExit();
	afx_msg void OnJiami();
	afx_msg void OnAbout();
	//}}AFX_MSG
	afx_msg LRESULT RunHide(WPARAM wParam,LPARAM lParam);	//运行时隐藏窗口
	afx_msg void OnMyIconNotify(WPARAM wParam,LPARAM lParam);	//托盘图标响应事件
	DECLARE_MESSAGE_MAP()
};


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SECRETCHATDLG_H__1047F9F5_CF01_483A_8822_470EF4A132CF__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -