Socket Send带指针的结构体以及不定长数据

一般来说,我们使用Send发送结构体数据,结构体里面的数据,一般都是用定义好了的char 数组来发送的,如下例子:

	struct Sendbuf
	{
		char encode;           //数据编码格式。已定义:0:UTF-8,1:GBK,2:GB2312,3:ISO8859-1 4.
		char encrypt;         //加密类型。0表示不加密
		char valuesEncode;    //报文格式。0,string,1,json,2:xml;
		char SendDate[1024];  //发送的数据   (一般没有特殊情况下,我们都是使用这种方式)
		int  length;          //发送数据的长度
	};

	const char *msg = "Think You!!!";                         //这里是要发送的内容
	int SendDateklength = sizeof(Sendbuf) + strlen(msg)+1;    //计算要发送的总的长度 (结构体长度+发送内容的长度)
	Sendbuf SendDate;
	SendDate.encode = 1;
	SendDate.encrypt = 0;
	SendDate.valuesEncode = 1;
	SendDate.length = strlen(msg);
	strcpy_s(SendDate.SendDate,strlen(msg) + 1,msg);
	send(socket,(const char *)SendDate,SendDateklength,0); 


这种方式局限很大,而且通用性也不强,比如说现在我要发送一个未知大小的数据怎么办,可能比sizeof(SendDate)更大,如果这种需求,上面的方法明显就不能用了,我把我的解决方法贴到下面,供大家参考:

	struct Sendbuf
	{
		char encode;             //数据编码格式。已定义:0:UTF-8,1:GBK,2:GB2312,3:ISO8859-1 4.
		char encrypt;            //加密类型。0表示不加密
		char valuesEncode;       //报文格式。0,string,1,json,2:xml;
		char SendDate[1];        //发送的数据   (一般没有特殊情况下,我们都是使用这种方式)
		int  length;             //发送数据的长度
	};
	const char *msg = "Think You!!!";                         //这里是要发送的内容(msg是未知大小的内容)
	int SendDateklength = sizeof(Sendbuf) + strlen(msg) +1;   //这里是获取结构体的大小和发送内容的大小之和
	Sendbuf *SendDate = (Sendbuf*)new char[SendDateklength ]; //new 出一个内存空间
	SendDate->encode = 1;
	SendDate->encrypt = 0;
	SendDate->valuesEncode = 1;
	SendDate->length = strlen(msg);
	strcpy_s(SendDate->SendDate,strlen(msg) + 1,msg);         //这里使用strcpy_s赋值
	send(socket,(const char *)SendDate,SendDateklength,0);    //Send
	delete []SendDate;                                        //发送完之后记得释放内存
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值