问题描述
- 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