(纯纯的干货!!!)socket通信中实现显示屏处理数据

(纯纯的干货!!!)socket通信中如何实现显示屏操作

一. 实现: 利用消息队列的读操作作为socket通信的显示屏
技术:消息队列以及socket进程通信(socket此处不讲解)

下列代码属于一份独立文件(可生成可执行文件)
消息队列的读(就是显示屏)

//!< 显示屏
/***********************************
摘 要:
服务器功能:
	显示信息
完成日期:2021年10月3日
************************************/

#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <errno.h>

#define BUFFER_SIZE 1024
//!< 定义一个消息队列数据的结构体
struct StrMessage{
    long type;	//!< 这个就是类型的问题(想了解的话自行百度)
    char SZMsgBuf[BUFFER_SIZE]; //!< 进行写操作的时候会把数据写到SZMsgBuf中去
};
struct StrMessage strMsg;
int main(int argc, char * argv [ ])
{
	int msgid, run = 1;
	int iKey = atoi(argv[1]); //!< argv[1] 代表:例如:./xxx xxx(键值)
	signal(SIGQUIT,signalSIGQUIT);
	if((msgid = msgget((key_t)iKey, 0666 | IPC_CREAT)) < 0)
	{
		perror("msgget");
		exit(-1);
	}
	while(msgrcv(msgid, (void *)&strMsg, BUFFER_SIZE, 0, 0))
	{	
		//!< 这循环里面做服务器传过来的数据处理
	}

	if(msgctl(msgid, IPC_RMID, 0) < 0)
	{
		perror("msgctl");
		exit(-1);
	}
	return 0;
}

运行方式:
错误格式:
在这里插入图片描述

正确方式:
在这里插入图片描述

最重要的部分(写部分)

那么问题来了,两个客户端和一个服务器时,客户端要进行通信,服务器转发数据,怎么来服务器转发过来的数据让它在显示屏上打印出来了呢,要怎么实现呢?

解决上述问题:

#define BUFF_SIZE 1024
//!< 消息队列 写操作
void shm_And_MsgInit(char* v_iKey);
void displayContent(char* v_pContent);
//!< 将消息队列的标识号定义程全局变量
//!< 消息队列Id
int iMsgId = 0;
//!< 消息队列结构体
struct StrMessage{
    long type;
    char SZMsgBuf[BUFF_SIZE];
};
struct StrMessage strMsg;

//!< 消息队列的创建
void shm_And_MsgInit(char* v_iKey)
{
	int ikey = atoi(v_iKey);
	if((iMsgId = msgget((key_t)ikey, 0666 | IPC_CREAT)) < 0)
	{
		perror("msgget");
		exit(-1);
	}
}
//!< 消息队列显示处理
//!< 为了减少代码的重复性,我将消息队列封装成一个函数,有用到的时候即可调用,可以大大减少重复性,代码更加简洁

void displayContent(char* v_pContent)
{
	strcpy(strMsg.SZMsgBuf,v_pContent);
	strMsg.type = 1;
	if(msgsnd(iMsgId, (void*)&strMsg, strlen(strMsg.SZMsgBuf)+1, 0)<0)
	{
		perror("msgsnd fail\n");
		exit(-1);
	}
	memset(strMsg.SZMsgBuf,0,BUFF_SIZE);
}
/****************************************************/

int main(int argc,char* argv[])
{
	//!< 消息队列的初始化
	shm_And_MsgInit(argv[1]);
	/*
	其他的功能实现操作
	*/
	if(msgctl(iMsgId, IPC_RMID, 0) < 0)
	{
		perror("msgctl");
		exit(-1);
	}
	return 0;
}


那么问题又来了,要怎么调用函数呢?
在通信的过程中肯定是有recv();send();或者write(),read()的库函数的,在客户端的代码中,只要接收到服务器转发过来的数据想要打印在显示屏上的话,在recv()或者read()的下一行写上displayContent(char* v_pContent);
char* v_pContent:代表的是:数据;

运行方式:与显示读的方式一样

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
实现ag-grid的自定义单元格,你可以使用cellRenderer和valueFormatter这两种方法。 cellRenderer是用来渲染单元格内容的方法。你可以在GridComponent组件定义一个cellRenderer函数,然后在columnDefs指定该函数作为单元格的渲染器。在cellRenderer函数,你可以根据需要自定义单元格的显示内容和样式。 valueFormatter是用来格式化单元格值的方法。你可以在GridComponent组件定义一个valueFormatter函数,然后在columnDefs指定该函数作为单元格的值格式化器。在valueFormatter函数,你可以对单元格的值进行处理,例如添加单位、格式化日期等。 在使用ag-grid时,你可以在ag-grid-angular标签通过\[columnDefs\]属性来定义列的配置。在columnDefs,你可以指定每一列的字段名、标题、宽度等属性,并通过cellRenderer和valueFormatter来实现自定义单元格的功能。 例如,你可以在columnDefs指定一个自定义的cellRenderer函数来渲染一个带有按钮的单元格: ```typescript columnDefs = \[ { headerName: '操作', field: 'action', cellRenderer: this.customCellRenderer } \]; customCellRenderer(params) { return '<button (click)="doSomething()">点击</button>'; } ``` 你还可以在columnDefs指定一个自定义的valueFormatter函数来格式化单元格的值: ```typescript columnDefs = \[ { headerName: '日期', field: 'date', valueFormatter: this.customValueFormatter } \]; customValueFormatter(params) { return params.value.toLocaleDateString(); } ``` 通过这样的方式,你可以实现ag-grid的自定义单元格功能。希望对你有帮助! #### 引用[.reference_title] - *1* *2* [ag-Grid的基本用法一(表格列的定义)](https://blog.csdn.net/GongZhongNian/article/details/78030628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [如何使用ag-Grid](https://blog.csdn.net/Jane_2160/article/details/128468734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值