c++中socket编程,c++实现socket通信

  c++中socket编程,c++实现socket通信

  [转载]c/c通过socket发送结构_林绍友_新浪博客

  转载]c/c通过socket发送结构

  原文地址:c/c通过socket发送结构作者:少在冰天雪地里旅行

  C/c通过socket发送结构可以直接先把结构转换成内存,然后通过send直接发送。

  在网络通信过程中,经常会涉及到一些相关的参数,如数组、结构等。事实上,构造的方法很简单。因为结构对象在内存中分配的空间是连续的,所以整个结构可以直接转换成一个字符串发送。当接收者将这个字符串返回给结构时,它就完成了。

  首先,我们建立一个结构。

  结构UsrData{

  char usr _ id[16];

  char usr _ pwd[16];

  char usr _ nickname[16];

  };

  当然,这个结构必须在发送方和接收方都声明。

  接下来,创建对象,初始化它,并发送它。

  UsrData sendUser

  memcpy( sendUser.usr_id," 100001 ",sizeof(" 100001 "));

  memcpy( sendUser.usr_pwd," 123456 ",sizeof(" 123456 "));

  memcpy( sendUser.usr_nickname," Rock ",sizeof(" Rock "));

  send( m_socket,(char *) sendUser,

  sizeof(UsrData),0);

  这样,发送者已经将这个mUser对象作为字符串发送了。

  最后,它在接收器处被接收。

  char缓冲区[1024];

  UsrData recvUser

  recv( m_socket,buffer,sizeof(buffer),0);

  memcpy( recvUser,buffer,sizeof(buffer)

  );

  此recvUser对象中的数据与sendUser相同。具体原因其实很简单,就是结构体对象的内存区域是连续的,同时每个成员的块大小都已经分配好了。当您收到自己的块时,您自己的数据实际上已经收到。很简单,但还是有用的。

  您也可以将内存直接写入文件:

  int CFG _ FD=-1;

  cfg_fd=open(HD4100_CONFIG_FILE,

  O _ RDWR O _ CREAT O _ TRUNC);

  if (cfg_fd

  0)

  {

  printf(打开

  配置文件失败/n’);

  return-1;

  }

  write(cfg_fd,第,

  sizeof(HD 4100 _ rec _ t));

  //hd4100_rec_t是自定义结构。

  close(CFG _ FD);

  printf(写入配置文件的段落

  file:/n );

  读取(cfg_fd,hd4100_config,

  sizeof(HD 4100 _ rec _ t));//将文件内容读入内存

  close(CFG _ FD);

  包含引用类型或值类型的结构或对象不能通过上述方法直接发送,而必须通过序列化转换为二进制流才能发送和接收。比如c#

  套接字传输序列化结构的示例:

  为了传输数据,这里有一个传输struct的例子。

  第一:把struct写成一个单独的类,编译成dll。

  使用系统;

  [可序列化]

  公共结构USER_INF

  {

  公共长id;

  公共字符串昵称;

  公开串性;

  公共int age

  公共字符串地址;

  公共字符串密码;

  }

  然后在服务器和客户机上添加这个dll。

  下面是服务器发送此序列化的结构

  while(真)

  {

  套接字s=tcpl。accept socket();

  BinaryFormatter bf

  BF=new binary formatter();

  memory stream stream=new memory stream();

  USER_INF用户;

  user . id=0;

  user.nickname= Pony

  user.sex=?;

  user.age=20

  user . address= 192 . 168 . 7 . 91 ;

  user.password= 123456

  bf。序列化(流,用户);

  byte[] buff=stream。to array();

  南发送(buff,buff。长度,0);

  南close();

  控制台。WriteLine(?);

  }

  首先,客户端接收数据并将其反序列化。

  BinaryFormatter bf

  BF=new binary formatter();

  USER_INF user=(USER_INF)bf反序列化;

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: