永发信息网

socket 怎么发送一个变量值

答案:6  悬赏:0  手机版
解决时间 2021-03-19 17:00
  • 提问者网友:棒棒糖
  • 2021-03-19 07:18
现在在服务端有socket的一个send函数,是这样的send(new_fd,&voltage,8,0);这个函数不用说明应该知道什么意思吧,我现在是要发送一个变量voltage的值,但是这个变量是floate型的,我已经把它转化为char型的还是不对,结果还是不对。请问下怎么才能把voltage发送到客户端?
最佳答案
  • 五星知识达人网友:煞尾
  • 2021-03-19 08:16
可以定义一个结构体变量,结构体里面有float、double类型的数据,然后发送;
参考如下:
struct person{
char name[20];

int age;

float high;

};


//发送方代码如下:

char temp[100]; //传送的字符串
struct person p1; //声明一个需要传送的结构体

p1.age = 10;

p1.high = 1.80f;

strcpy(p1.name,"zhangsan",sizeof(p1.name));

memset(temp,0,sizeof(temp)); //对该内存段进行清 0

memcpy(temp,&p1,sizeof(person)); //把这个结构体中的信息从内存中读入到字符串temp中

//接下来传送temp这个字符串就可以了

sendto(sock,temp,sizeof(person),0,(SOCKADDR*)&addSer,sizeof(SOCKADDR));

//这样这个结构体的信息就发送到addSer相应的套接字了


char temp[100]; //传送的字符串

struct person p2; //声明一个存放接收信息的结构体

memset(temp,0,sizeof(temp)); //清内存

//下面是接收字符串的代码

recvfrom(sock_listen,temp,sizeof(temp),0,(sockaddr*)&addCli,&len);

//下面对字符串信息进行还原,将其变成的结构体数据

memcpy(&p2,temp,sizeof(person)); //解析过程

//下面就可以对p2中的数据进行各种操作了,也完成了结构体数据的传送。
全部回答
  • 1楼网友:几近狂妄
  • 2021-03-19 12:20
发送都是char类型的,我这里有个传送结构体的代码,使以前我做过的,结构体里面有float double类型的数据,你可以参考下,说明如下: 假设需要传送的结构体如下: struct person{ char name[20]; int age; float high; }; 可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。 发送方代码如下: char temp[100]; //传送的字符串 struct person p1; //声明一个需要传送的结构体 //以下是结构体的初始化信息 p1.age = 10; p1.high = 1.80f; strcpy(p1.name,"zhangsan",sizeof(p1.name)); memset(temp,0,sizeof(temp)); //对该内存段进行清 0 memcpy(temp,&p1,sizeof(person)); //把这个结构体中的信息从内存中读入到字符串temp中 //接下来传送temp这个字符串就可以了 sendto(sock,temp,sizeof(person),0,(SOCKADDR*)&addSer,sizeof(SOCKADDR)); //这样这个结构体的信息就发送到addSer相应的套接字了 接收方代码如下: 同样需要定义字符串和相同的结构体对象 char temp[100]; //传送的字符串 struct person p2; //声明一个存放接收信息的结构体 memset(temp,0,sizeof(temp)); //清内存 //下面是接收字符串的代码 recvfrom(sock_listen,temp,sizeof(temp),0,(sockaddr*)&addCli,&len); //下面对字符串信息进行还原,将其变成我们的结构体数据 memcpy(&p2,temp,sizeof(person)); //解析过程,将字符串的内容写入到p2所在内存完成解析 下面就可以对p2中的数据进行各种操作了,也完成了结构体数据的传送。
  • 2楼网友:逃夭
  • 2021-03-19 12:03
如果只是要传送1个float,那改成 send(new_fd,(char *)&voltage,sizeof(float),0); 但是如果,以后还要传送和其他类型的数据混合的数据就比较麻烦了。 首先不论是TCP的send还是UDP的sendto 都只接受char数组的指针作为参数。 那么,要发送其他类型的数据,只能把操作进行到字节的程度。
  • 3楼网友:毛毛
  • 2021-03-19 10:50
send(new_fd,(char *)&voltage,8,0);
  • 4楼网友:几近狂妄
  • 2021-03-19 09:50
你就用float型的变量的地址就行啊,后边写上float形变量的长度,一般是2个字节
  • 5楼网友:归鹤鸣
  • 2021-03-19 09:24
这样试试吧 发送端: float voltage = .0; send(new_fd, (char *)&voltage, sizeof(float), 0); 接收端: int len = sizeof(float); char data[len + 1]; int recv(sk,data,len, 0); data[len] = '\0' float voltage = atof(data);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯