看了网上很多大神,有认识重载运算符把结构体中的内容一个一个进行传递的,比较麻烦,也有说的比较轻松的,完全不适合我这种小白看,完全不知所以。最后终于找到了解决的方法。下面是我学习到的的方法:
在客户端头文件中定义一个结构体:
typedef struct node { char count[20]; char passwd[20]; char cmd[5]; char cmd2[5]; }Node;
下面是发送的函数:
Node* stu_log = new Node; strcpy(stu_log->count,ui->lineEdit_count_2->text().toUtf8().data()); strcpy(stu_log->passwd,ui->lineEdit_password_2->text().toUtf8().data()); strcpy(stu_log->cmd2,"log"); Tsocket->write((char*)stu_log,sizeof(Node));
stu_log是一个结构体指针,将lineEdit中的内容进行转码读取,复制给结构体中对应的变量,在write的时候第一个参数是char*类型的,进行强转,第二个参数是传递的结构体的大小。
下面是接受的部分,首先在服务器的头文件中定义一个一样的结构体,用来接收读取的结构体的内容,一样的结构体我就不写了,同上。
下面是接受的函数:
Node *str = new Node; Tsocket->read((char*)str,sizeof(Node));
strl中就是你传过来的结构体了,你可以在服务器的头文件中定义一个list,头文件是#include <list>,在定义的时候要加上标准命名空间,std::list<Node> ls; 将你接收到的结构体进行保存。