Co_priest 2015-08-19 07:42 采纳率: 100%
浏览 3052
已采纳

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,求有经验的前辈指点
  • 写回答

3条回答 默认 最新

  • threenewbee 2015-08-19 08:04
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问