Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1542806
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: 云计算

2014-03-07 16:47:18

SOCKET发送结构体时,必须使用连续的内存。也就是结构内(嵌套)不能包含指针。

发送时将结构体转为字节流

1. 定长结构体

  1. struct Sendbuf
  2. {
  3.     char SendDate[1024]; //定长的数据
  4. };
  5.   
  6. const char *msg = "Think You!!!"; //这里是要发送的内容 

  7. int SendDateklength = sizeof(Sendbuf) + strlen(msg)+1; //计算要发送的总的长度 (结构体长度+发送内容的长度)
  8. Sendbuf SendDate; 

  9. SendDate.length = strlen(msg); 
  10. strcpy_s(SendDate.SendDate,strlen(msg) + 1,msg); 

//将结构体首地址转为(const char*),发送

  1. send(socket,(const char *)&SendDate,SendDateklength,0)
2. 变长结构体

  1.     struct Sendbuf
  2.     { 
  3.         char sendDataWarning[0]//VS2010: warning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组.
  4.                                 //   当 UDT 包含大小为零的数组时,无法生成复制构造函数或副本赋值运算符
  5.         char SendDate[1]; //未知长度的数据
  6.         int length; //发送数据的长度
  7.     };
  8.     const char *msg = "Think You!!!"; //这里是要发送的内容(msg是未知大小的内容)
  9.     int SendDateklength = sizeof(Sendbuf) + strlen(msg) +1; //计算要发送的总的长度 (结构体长度+发送内容的长度) 

  10.     Sendbuf *SendDate = (Sendbuf*)new char[SendDateklength ]; //申请待发送的数据的实际长度
  11.     SendDate->length = strlen(msg);
  12.     strcpy_s(SendDate->SendDate,strlen(msg) + 1,msg); //这里使用strcpy_s赋值 

  13.     send(socket,(const char *)SendDate,SendDateklength,0); //Send
  14.     delete []SendDate; //发送完之后记得释放内存
//参考
http://blog.csdn.net/zhaobangyu/article/details/8904005

阅读(4025) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~