socket(8):socket 消息处理工程示例

1. 大型工程socket消息处理大致模板

以 HELLO进程间消息通信的工程为例来简要说明在socket中处理消息的,其他工程类似。

2.消息类型

typedef struct tagHELLO_MSG_TYPE
{
	HELLO_MSG_TYPE_SEND = 0;    //发送hello 消息
	HELLO_MSG_TYPE_RPINT;       //打印hello 消息
	//…………其他消息
	HELLO_MSG_TYPE_MAX;     //最大消息
}HELLO_MSG_TYPE_S

3.消息头

typedef struct tagHELLO_MSGHEAD
{
	int iMsgType;//消息类型,是消息类型中的消息
}HELLO_MSG_HEAD_S;

4. 具体的消息

具体要做的事情,或者说要发送的数据,这里举例子

typedef struct tagHELLO_MSG
{
	int iMsgNum;   //消息代号
	char* pContent;//具体的消息内容等
	//…… ……其他数据
}HELLO_MSG_S;

5.进程1 发送消息给 进程2

char* pcBuf = NULL; //发送给进程2的消息 buf
…… ……
//一系列处理
//malloc pcBuf;
//memset pcBuf;
…… ……

//消息初始化阶段
HELLO_MSG_S * pHelloMsg = NULL;
//填充消息
pHelloMsg->iMsgNum = 123;
pHelloMsg->pContent = "Hello world";

HELLO_MSG_HEAD_S stHelloMsgHead;
memset(stHelloMsgHead, 0, sizeof(stHelloMsgHead));

设置此次发送的消息类型,然后把消息头塞进 buf pcBuf 中

stHelloMsgHead.iMsgType = htons(int)HELLO_MSG_TYPE_SEND; //记得转序
memcpy(pcBuf, &stHelloMsgHead, sizeof(HELLO_MSG_HEAD_S)); //塞消息头到 pcBuf 初始位置

pcBuf 往后偏移消息头的大小,塞具体的消息数据内容

memcpy(pcBuf +  sizeof(HELLO_MSG_HEAD_S), pHelloMsg, 	sizeof(HELLO_MSG_S));

6.线程2 接收并处理线程1 的消息

HELLO_MSG_S * pHelloMsg2 = NULL;

//将 pcBuf 转成消息头进行检查

	HELLO_MSG_HEAD_S* pHelloMsgHead;
	pHelloMsgHead = (HELLO_MSG_HEAD_S)(void *)pcBuf;

获取消息类型
iMsgType = pHelloMsgHead->iMsgType;

判断消息类型是否合法
if( HELLO_MSG_TYPE_MAX <= iMsgType)
{
	return error;
}

获取消息,处理消息

switch(iMsgType)
{
	case HELLO_MSG_TYPE_SEND:
	{
		//将具体消息取出来 进行处理
		pHelloMsg2 = (HELLO_MSG_S *)(void *)(pcBuf + sizeof(HELLO_MSG_HEAD_S));
	
		//处理函数
		printf("Msg Num = %d, MsgContent = %s\r\n",
				pHelloMsg2->iMsgNum, pHelloMsg2->pContent);
		break;
	}
	case HELLO_MSG_TYPE_RPINT:
	{
		//同上
		printf("RPINT HELLO\r\n");
		//处理函数
		break;
	}
	…… ……
	default:
	{
		break;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值