struct send_info

{
char info_from[20]; //发送者ID
char info_to[20]; //接收者ID
int info_length; //发送的消息主体的长度
char info_content[1024]; //消息主体
};

  发送端主要代码(为了简洁说明问题,我把用户输入的内容、长度等验证的代码去掉了):

struct send_info info1; //定义结构体变量
printf("This is client,please input message:");
//从键盘读取用户输入的数据,并写入info1.info_content
memset(info1.info_content,0,sizeof(info1.info_content));//清空缓存
info1.info_length=read(STDIN_FILENO,info1.info_content,1024) - 1;//读取用户输入的数据
  
memset(snd_buf,0,1024);//清空发送缓存,不清空的话可能导致接收时产生乱码,
//或者如果本次发送的内容少于上次的话,snd_buf中会包含有上次的内容
  
memcpy(snd_buf,&info1,sizeof(info1)); //结构体转换成字符串
send(connect_fd,snd_buf,sizeof(snd_buf),0);//发送信息
接收端主要代码:

struct send_info clt; //定义结构体变量
  
memset(recv_buf,'z',1024);//清空缓存
recv(fd,recv_buf,1024,0 );//读取数据
  
memset(&clt,0,sizeof(clt));//清空结构体
memcpy(&clt,recv_buf,sizeof(clt));//把接收到的信息转换成结构体
  
clt.info_content[clt.info_length]='';
//消息内容结束,没有这句的话,可能导致消息乱码或输出异常
//有网友建议说传递的结构体中尽量不要有string类型的字段,估计就是串尾符定位的问题
  
if(clt.info_content) //判断接收内容并输出
printf("nclt.info_from is %snclt.info_to is %snclt.info_content is%snclt.info_length is %dn",clt.info_from,clt.info_to,clt.info_content,clt.info_length);
//至此,结构体的发送与接收已经顺利结束了

socket发送结构体的更多相关文章

  1. C# Socket 入门4 UPD 发送结构体(转)

    今天我们来学 socket  发送结构体 1. 先看要发送的结构体 using System; using System.Collections.Generic; using System.Text; ...

  2. Linux C Socket编程发送结构体、文件详解及实例

    利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...

  3. C#与C++通过socket传送结构体

    C#服务端: using System; using System.Net.Sockets; using System.Net; using System.IO; using System.Diagn ...

  4. pythonUDP发送结构体,对齐到C++结构体

    给出程序先: import random import socket import struct import threading import pickle import json from str ...

  5. QTcpSocket发送结构体

    我需要发送的结构体 struct NetDataHeader_t { int nDataType; int nDataSize; }; struct NetDataBase_t { NetDataHe ...

  6. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  7. 2. socket结构体——表示socket地址

    一.两种通用socket结构体 1. sockaddr struct sockaddr { sa_family_t sa_family; // 地址族 char sa_data[14]; // 存放s ...

  8. enginefuncs_t 结构体中的函数

    就是常见的 g_engfuncs 中的函数.AMXX 里就是 fakemeta 的 EngFunc_** // 这些函数由引擎提供给EXTDLL使用.mp.dll hl.dll ... typedef ...

  9. C#结构体数组间的转化

    转自:http://developer.51cto.com/art/200908/143779.htm 解决C#结构体数组间的转化问题的由来:在写C#TCP通信程序时,发送数据时,如果是和VC6.0等 ...

随机推荐

  1. OSI模型第三层网络层-初识路由协议

    1.路由协议: 顾名思义就是路由器所使用的协议. 分类: (1)按照作用范围分类,IGP(类型)内部网关协议(rip,ospf,isis),EGP(类型)边界路由协议(bgp) 把互联网比作整个世界土 ...

  2. iOS GPUImage 滤镜介绍

    这里直接引用官方描述: The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU-accelerated ...

  3. zookeeper(二): Curator vs zkClient

    目录 zookeeper Curator zkClient 客户端对比 写在前面 1.1. zookeeper应用开发 1.1.1. ZkClient简介 1.1.2. Curator简介 写在最后 ...

  4. PAT 1064. 朋友数(20)

    如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号.给定一些整数,要求 ...

  5. 教你管理SQL备份与恢复系列(1-20)

    原链接:https://bbs.51cto.com/thread-1147908-1.html 教你备份与恢复数据库,直接下面下文档吧. 教你备份与恢复数据库(1)事务 http://bbs.51ct ...

  6. proguard 不混淆第三方jar包的问题

    导入lib文件,并且用-dontwarn 和 keep class结合试试,例如: -libraryjars libs/log4j.jar -dontwarn org.apache.log4j.*-k ...

  7. SVG嵌入HTML

    将SVG图像嵌入到HTML文件有多种方法: 使用<iframe>元素来嵌入SVG图像 使用<img>元素来嵌入SVG图像 将SVG图像作为背景图像嵌入 直接使用<svg& ...

  8. C#自己写的第一个小程序,庆祝一下

    Packages.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; na ...

  9. 【转载】Spring介绍之二

    Spring框架,是进行对象管理,对象关联,解耦的一个中间层框架.SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用.好,首先我们先来看一下Spri ...

  10. 牛客小白月赛1 F 三视图 【循环】

    题目链接 https://www.nowcoder.com/acm/contest/85/F 思路 记录每一个面 上的点 是否有方块 然后 根据它的输出顺序 遍历访问 如果有 输出 'X' 否则 输出 ...