socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空

问题描述

socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空

结构体定义:
typedef struct PriceChangeVar
{
int varNum; //产品编号
float varPrice; //监控价格
int changeMark; //监控标志
}PriceCV;

//客户信息结构体
typedef struct CilentInformation
{
PriceCV MemPriceCV[10]; //价格需求定制结构体
SYSTEMTIME loginTime; //上线时间

LONGLONG TelephoneNum;  //手机号码
ULONG   MemIp;          //IP地址
ULONG   MesageCount;    //已发信息数量

wchar_t MemName[512];   //会员名称

int state;              //客户请求的状态
int MemType;            //会员等级

SOCKET serConn;         //服务器accpet链接客户端的套接字

}Cinfo;

服务端代码:
Cinfo t_cinfo;

    int rret = recv(((Cinfo*)lpPrama)->serConn,(char *)&t_cinfo,sizeof(Cinfo),0);
    //接收到的信息,已经有用户名、会员等级、价格需求结构体、客户状态、手机号码,
    //需要补充IP、套接字接口、发送时间

    wchar_t *t_name = t_cinfo.MemName;
    int     t_type  = t_cinfo.MemType;
    LONGLONG    t_tele = t_cinfo.TelephoneNum;
    int state_temp = t_cinfo.state;

    客户端代码:
    int sret = JSocket::ConnectSocket(LOCALHOST_IP,6000);
        Cinfo info;
        memset(&info,0,sizeof(Cinfo));
        wcscpy(info.MemName,JGlobal::GetUserName().GetBuffer(0));
        info.MemType = JGlobal::GetUserType();
        info.state = STATE_LOGIN;
        info.TelephoneNum = (LONGLONG)12345678910;

        sret = JSocket::SendVipInformation((char*)&info,sizeof(Cinfo));

        客户端和服务端发送接受都是成功的,返回值与结构体的size一致,发送时赋值也OK,现在就是接受之后结构体内部所有值为0,求有经验的前辈指点

解决方案

sret = JSocket::SendVipInformation((char*)&info,sizeof(Cinfo));
不能这么写
char会丢弃之后的数据

JSocket怎么实现的?应该直接传二进制数据

解决方案二:

试试

 sret = JSocket::SendVipInformation(byte*)&info,sizeof(Cinfo));

解决方案三:

你没有检查rret?也许有错误呢。
还有((Cinfo*)lpPrama)->serConn没错吧。

时间: 2024-12-03 04:47:25

socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空的相关文章

xcode-c语言关于结构体类型的函数的返回值return

问题描述 c语言关于结构体类型的函数的返回值return 定义了一个全局变量的结构体,然后又定义了一个结构体类型的函数,函数的返回值如何返回一个空值,显然return 0;是不行的 解决方案 1)可以用结构体指针,因为指针的null是一个典型的"空",相对于int的0更能体现"空值"的含义,也最方便 2)结构体属于你自己定义的变量,所以你也可以规定当这个结构体里面的变量的值是某种情况是,认为这个结构体类型的变量是"空",比如一般意义上的int认为

如何在传输结构体数据的同时,完成结构体中变量数据的采集?

问题描述 最近在做一个项目,自己负责的主要工作是将定义好的结构体中的变量的数据传出来,以及matlab计算后传回来的数据进行解算并显示结构体1:传递初始化数据-没有问题结构体2:实时传递摇杆采集的数据-有问题结构体3:传递自动飞行数据-没有问题结构体4:接受matlab结算的数据,并进行显示(暂时还没有测试)现在遇到的问题,主要是:我需要实时传递摇杆采集的数据并传递出去这是按钮事件,当点击按钮之后开始传递结构体的数据SendUAV_ManualPilotpSendUAV_ManualPilot;

c语言 结构体 指针-写了一个返回结构体指针的函数,编译时总是提醒没有初始化p,但是初始化了。

问题描述 写了一个返回结构体指针的函数,编译时总是提醒没有初始化p,但是初始化了. 源码 程序是用C写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 结构体指针的初始化 解决方案二: 哪有你所说的指针p啊 解决方案三: 是否用的c语言方式编译.编译器是否用c++方式编译

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

利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.cnblogs.com/xudong-bupt/p/3496741.html 1.memcpy Copy block of memory.内存块拷贝函数,该函数是标准库函数,可以进行二进制拷贝数据. 函数原型: void * memcpy ( void * destination, const voi

C语言 socket 如何发送带指针的结构体?

问题描述 C语言 socket 如何发送带指针的结构体? 发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出.但是接收的时候,怎么接收到结构体中?thanks! 解决方案 发送: struct f;char *ffff[sizeof(f)];memcpy(ffff &f sizeof(f)); 接收: struct f; ffff为收到的数据 memcpy(&f ffff sizeof(ffff)); 解决方案二: C语言---结构体指针C语言--结构体中的指针C语

socket c c++ 结构体-socket发送结构体问题,无法在服务器端显示完整的结构体

问题描述 socket发送结构体问题,无法在服务器端显示完整的结构体 定义了如下结构体 在发送结构体的时候转换成char *类型 输入了如下学生数据__ 在接收端也进行了数据类型转换,如下 为什么最后的年龄输不出来,而是一串数字,怎么解决? 解决方案 你发送的send是直接发送的student的指针,你需要把整个student的内容存到char数组,然后发送char数组,接收后,也要把char数组memcpy等复制回来 解决方案二: sscanf处有&还能收到数据吗? 解决方案三: 1.你在客户

Linux socket编程:addrinfo结构体与getaddrinfo函数

1. 概述 IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间.IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6.getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个addrinfo的结构(列表)指针而不是一个地址清单.这些addrinfo结构随后可由套接口函数直接使用.如此以来,g

套接字编程-socket传输文件时遇到的问题!

问题描述 socket传输文件时遇到的问题! 先给出代码. 客户端: SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(4444); HANDLE fp =CreateFi

嵌入式开发C语言位结构体用途详解

在嵌入式开发中,经常需要表示各种系统状态,位结构体的出现大大方便了我们,尤其是在进行一些硬件层操作和数据通信时.但是在使用位结构体的过程中,是否深入思考一下它的相关属性?是否真正用到它的便利性,来提高系统效率? 1.位结构体类型设计 [cpp] view plain copy print? //data structure except for number structure typedef struct symbol_struct { uint_32 SYMBOL_TYPE :5; //da