服务器端部分代码如下:
struct PACKAGE_QueryUser
{
char userno[11];
char username[31];
char userphone[12];
char useraddress[51];
char useropendate[11];
char meterno[11];
char userstate[2];
char openwsno[5];
char operatorno[4];
};//定义结构体,存放从数据库中查询出的数据
PACKAGE_QueryUser *RQueryUser=(PACKAGE_QueryUser *)malloc(60*sizeof(PACKAGE_QueryUser));
PACKAGE_QueryUser *oRQueryUser=RQueryUser;
assert(RQueryUser!=NULL);
QueryUser(RQueryUser);//从数据库中查询数据的函数,RQueryUser结构体存放查询结果
int nsd=send(ClientSocket, (char *)RQueryUser,sizeof(RQueryUser)+1, 0);//能这么用吗???
printf("nsd=%d\n",nsd);
if(nsd<0)
{
closesocket(ClientSocket);
exit(-1);
}
closesocket(ClientSocket);
exit(0);

解决方案 »

  1.   

    int xxx_count = QueryUser(RQueryUser);
    int nsd=send(ClientSocket, (char *)RQueryUser,sizeof(PACKAGE_QueryUser)*xxx_count, 0);
      

  2.   

    QueryUser最好返回size然后再如楼上说的。
    sizeof(RQueryUser)只有4个字节。
      

  3.   

    指针不能用sizeof,否则一直都是4,不要用指针赋值,用对象就可以了,另外你这个结构体是定长的,直接sizeof(PACKAGE_QueryUser )就行
      

  4.   


    谢谢你的建议,现在因为长度是不固定的,实际上是从数据库中取出的记录条数.这个问题还没有找到比较好的办法.
    QueryUser()函数可以返回记录的条数,但是有个矛盾,就是必须先malloc,再调用QueryUser()函数,所以不知道怎么在malloc的时候先确定长度.希望更多的人近来讨论下