MFC使用AND的OGToolKits中的libOGSocket进行网络通信
发布日期:2021-05-07 00:35:23 浏览次数:22 分类:精选文章

本文共 3994 字,大约阅读时间需要 13 分钟。

目录


 

一、目的

1、想:MFC使用AND的OGToolKits中的libOGSocket进行网络通信

 

二、参考

1、

 

三、操作:服务端

1、效果:

服务端打开后,客户端再打开,客户端会发送一个结构体给服务端,

服务端会接受到这个结构体

 

1、服务端:创建MySever的MFC工程

1、使用OGToolKits,搭建MFC环境(跳过,网上很多方法)

下载:

1、MySeverDlg.h

头文件和命名空间

#include "libOGSocket.h"#include 
using namespace std;

初始化socket

//socketpublic:	bool Init_socket();

1、MySeverDlg.cpp

在程序最上面开始编写

std::vector
ogClient;#pragma pack(1) //设置结构体的边界对齐为1个字节,也就是所有du数据在内存中zhi是连续存储的。struct MyStruct{ int a; char pName[MAX_PATH];};#pragma pack(1)void * pServer = NULL;int port;//端口号//十六进制字符串转化为ASSIC字符串:串口转换内容时候使用到static int Hex2String(char* lpSrc, int len, char* lpDst, char chTag = ' '){ int ret = 0; char buf[2]; unsigned char* pSrc = (unsigned char*)lpSrc; for (int i = 0; i < len; i++) { unsigned char c0 = *pSrc >> 4; if (c0 >= 0x0 && c0 <= 0x9) { buf[0] = c0 - 0 + '0'; } else { buf[0] = c0 - 10 + 'A'; } unsigned char c1 = *pSrc++ & 0x0F; if (c1 >= 0x0 && c1 <= 0x9) { buf[1] = c1 - 0 + '0'; } else { buf[1] = c1 - 10 + 'A'; } *lpDst++ = buf[0]; ret++; *lpDst++ = buf[1]; ret++; if (0 != chTag) { *lpDst++ = chTag; ret++; } } return ret;}// 回调函数原型(在程序中实现函数功能)// 服务器检测到客户端连接触发// 客户端检测到连接服务器成功触发void LPCONNECT(unsigned int sock){ OG_CLIENT client; ZeroMemory(&client, sizeof(OG_CLIENT)); ogClient.push_back(client);}// 服务器检测到客户端连接断开触发// 客户端检测到服务器关闭触发void LPDISCONNECT(unsigned int sock){ for (unsigned int i = 0; i < ogClient.size(); i++) { if (ogClient[i].sock == sock) { ogClient.erase(ogClient.begin() + i); i--; } }}// 先接收后发送过程// cRecv传入时为接收到的数据|回调中为cSend填充要发送的数据// 返回实际发送的字节数// 如接收数据后不需要再发送响应数据回调中设返回值为0且不为cSend拷贝数据unsigned int LPPROC(unsigned int sock, char* cRecv, char* cSend){ //第一步:接受客户端发送来的消息 //测试0:输出char* cRecv的内容==================== //a:完成将传递来的char* cRecv16进制转换为string将其输出 char tmpC[MAX_PATH]; Hex2String(cRecv, 2, tmpC); TRACE("\n接收到的消息:"); TRACE(tmpC); TRACE("\n"); //测试1:将cRecv变为MyStruct结构体========================== //结果:成功 MyStruct * tmpMyStruct = (MyStruct *)(cRecv); //第二步:向客户端发送消息 MyStruct pData; ZeroMemory(&pData, sizeof(MyStruct)); ogTcpSocketSendData(pServer, sock, (char*)(&pData), sizeof(MyStruct)); return 0;}

初始化socket

bool CMySeverDlg::Init_socket(){		port = 8666;	//ipaddr:没内容的是程序做服务端;有内容是程序做客户端连接服务端	pServer = ogOpenTcpSocket("", port, sizeof(MyStruct), sizeof(MyStruct), LPPROC, LPCONNECT, LPDISCONNECT);	if (pServer== nullptr)	{		AfxMessageBox(L"没有打开网络!");	}	else	{	}	return true;}

 

三、操作:客户端:

1、创建:MyClient的MFC工程

1、使用OGToolKits,搭建MFC环境(跳过,网上很多方法)

下载:

1、MyClientDlg.h:和MySeverDlg.h类似

头文件

#include "vector"#include "libOGSocket.h"#include 
using namespace std;

 初始化socket

//socketpublic:	bool Init_socket();

1、MyClientDlg.cpp

写在最上面

std::vector
ogClient;#pragma pack(1)struct MyStruct{ int a; char pName[MAX_PATH];};#pragma pack(1)void * pServer = NULL;int port;// 回调函数原型(在程序中实现函数功能)// 服务器检测到客户端连接触发// 客户端检测到连接服务器成功触发void LPCONNECT(unsigned int sock){ OG_CLIENT client; ZeroMemory(&client, sizeof(OG_CLIENT)); ogClient.push_back(client); //发送 MyStruct pData; ZeroMemory(&pData, sizeof(MyStruct)); pData.a = 3; sprintf_s(pData.pName, "asd"); ogTcpSocketSendData(pServer, sock, (char*)(&pData), sizeof(MyStruct));}// 服务器检测到客户端连接断开触发// 客户端检测到服务器关闭触发void LPDISCONNECT(unsigned int sock){ for (unsigned int i = 0; i < ogClient.size(); i++) { if (ogClient[i].sock == sock) { ogClient.erase(ogClient.begin() + i); i--; } }}// 先接收后发送过程// cRecv传入时为接收到的数据|回调中为cSend填充要发送的数据// 返回实际发送的字节数// 如接收数据后不需要再发送响应数据回调中设返回值为0且不为cSend拷贝数据unsigned int LPPROC(unsigned int sock, char* cRecv, char* cSend){ TRACE(cRecv); TRACE("接收到的消息/n"); 发送 //MyStruct pData; //ZeroMemory(&pData, sizeof(MyStruct)); //ogTcpSocketSendData(pServer, sock, (char*)(&pData), sizeof(MyStruct)); return 0;}

 

bool CMyClientDlg::Init_socket(){	port = 8666;	//ipaddr:没内容的是程序做服务端;有内容是程序做客户端连接服务端	pServer = ogOpenTcpSocket("162.16.1.216", port, sizeof(MyStruct), sizeof(MyStruct), LPPROC, LPCONNECT, LPDISCONNECT);	if (pServer == nullptr)	{		AfxMessageBox(L"没有打开网络!");	}	else	{	}	return true;}

 

上一篇:[AS3]移动设备上的触控事件和手势
下一篇:十六进制字符串转化为ASSIC字符串

发表评论

最新留言

不错!
[***.144.177.141]2025年04月08日 01时39分37秒