发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出。
但是接收的时候,怎么接收到结构体中?thanks!
发送:
struct f;
char *ffff[sizeof(f)];
memcpy(ffff, &f, sizeof(f));
接收:
struct f;
ffff为收到的数据
memcpy(&f, ffff, sizeof(ffff));
发指针是没有什么用处的,因为对方同样数值的指针指向的内容你无法控制。
发送结构体,你实际想要的结构体内指针指向的内容。所以你必须将内容发到对方,然后重建结构体的指针值。
struc AA a;
char buf[100];//保存接收的结构体变量
a=*((sturc AA *) buf);
static char* merge_msg(int port, char* ipaddr, char* msg, int ipszie, int msgsize)
{
char p1, *p2;
char buffer = malloc(sizeof(int)+ipszie+msgsize);
if(buffer == NULL)
{
return NULL;
}
memset(buffer, 0, sizeof(int)+ipszie+msgsize);
p1 = ip_new(ipszie);
if(p1 == NULL)
{
free(buffer);
return NULL;
}
p2 = msg_new(msgsize);
if(p2 == NULL)
{
ip_delete(p1);
free(buffer);
return NULL;
}
my_itoa(port, buffer);
my_itoa(ipszie, p1);
my_itoa(msgsize, p2);
strcat(buffer, p1);
strcat(buffer, ipaddr);
strcat(buffer, p2);
strcat(buffer, msg);
return buffer;
}
.......
//发送前 把结构体转换成 字符串
static char* getip_from_server(char* msg, int ipsize)
{
char* ip = ip_new(ipsize);
if(ip == NULL)
{
return NULL;
}
int count = 1;
if(ipsize >= 10)
{
count = 2;
}
ip = substring(msg, ip, sizeof(int)+count, ipsize);
return ip;
}
static char* getmsg_from_server(char* msg, int msgsize)
{
char* buffer = msg_new(msgsize);
if(buffer == NULL)
{
return NULL;
}
int count = strlen(msg) - msgsize;
buffer = substring(msg, buffer, count, msgsize);
return buffer;
}
//数据收到后拆分下来。。
........
不知道这样写 有没有问题?