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

📄 p2pclient.h

📁 实现P2P NAT 客户端之间的通信,可以在同一LAN之间通信,也可以在不同LAN中相互通信
💻 H
字号:

#ifndef __P2P_CLIENT_H__
#define __P2P_CLIENT_H__

#include <WinSock2.h>
#include "../CommonDefine.h"

class P2PClient
{
public:
	P2PClient();
	~P2PClient();

	bool Login(char *pszUserName, char *pszServerIP);
	bool Logout();
	bool GetUserList();
	bool SendText(char *pszUserName, char* pszText, int nTextLen);
	void DisplayUserList();

private:
	bool Initialize();
	static DWORD WINAPI RecvThreadProc(LPVOID lpParam);

	// 处理各个消息的函数
	bool ProcUserLogAckMsg(MSGDef::TMSG_HEADER *pMsgHeader);
	bool ProcGetUserList(MSGDef::TMSG_HEADER *pMsgHeader);
	bool ProcUserListCmpMsg();
	bool ProcP2PMsg(MSGDef::TMSG_HEADER *pMsgHeader, const sockaddr_in& sockAddr);
	bool ProcP2PConnectMsg(MSGDef::TMSG_HEADER *pMsgHeader, const sockaddr_in& sockAddr);
	bool ProcP2PConnectAckMsg(MSGDef::TMSG_HEADER *pMsgHeader, const sockaddr_in& sockAddr);
	bool ProcUserActiveQueryMsg(MSGDef::TMSG_HEADER *pMsgHeader, const sockaddr_in& sockAddr);

private:
	SOCKET				m_sSocket;				// 套接字
	Peer_Info			m_PeerInfo;				// 本机信息
	PeerList			m_PeerList;				// 与本机相连的节点链表
	HANDLE				m_hThread;				// 线程句柄
	DWORD				m_dwServerIP;			// server IP地址
	WSAOVERLAPPED		m_ol;					// 用于等待网络事件的重叠结构
	CRITICAL_SECTION	m_PeerListLock;			// 用于读取m_PeerList的临界区对象
	bool				m_bExitThread;			// 是否退出线程
	bool				m_bLogin;				// 是否已经登陆服务器了
	bool				m_bUserListCmp;			// 是否得到了用户列表
	bool				m_bMessageACK;			// 是否接收到消息应答
};

#endif // __P2P_CLIENT_H__

⌨️ 快捷键说明

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