如下:
struct packet{
  unsigned char *packetdata;
  int           datalen;
  int           flag;
}PACKET;client端:
{PACKET m_packet;
m_packet.packetdata = (unsigned char*)malloc(1024);
if(NULL == m_packet)
{
   perrror("allocate memory error...");
   return;
}
m_packet.datalen = sizeof(hello the world");
memcpy(m_packet.packetdata, "hello the world", sizeof(hello the world"));
sendto(sfd, (char *)&packet, m_packet.datalen,...);
...
}当client和server不在一台机器上的时候,server收到的消息包中packetdata的内容还可以获取到吗?
对这种结构体中含有指针的,在socket中一般如何处理,请高手指教,谢谢!

解决方案 »

  1.   

    这样当然不能收到数据了,你把一个机子上的地址发到另一个机子上有什么用呢?
    不过我用过类似问题,那是在以前的项目上,中间传输用的是asn.1的码流,本地解开时结构体里有指针,但传输过程中显然是有那个指针指向的内容的。
      

  2.   

    struct packet{
      unsigned char packetdata[1024];
      int           datalen;
      int           flag;
    }PACKET;
      

  3.   

    呵呵 老大 你机子上得指针 是个unsigned char指针变量,
    呵呵~
    要传数据向楼上定义的 传的是数据实体~~
    小问题,不过 都是这样的,只要理解了 就行了,基础很重要,好好看看C++:)
      

  4.   

    谢谢楼上的各位,我后来看了一些相关的资料,应该将其进行序列化处理,比如可以如下操作:
    #define MAXSIZE 1024
    /* buffer的前四个字节存放数据的总长度,然后将结构体中的内容内存拷贝到buffer中,
       接收端先收四个字节,然后根据这个长度去收后面的数据。这个是权宜之计,因udp不太可靠,最好加个校验和字段.
    */
    unsigned char buffer[MAXSIZE];
    unsigned int len = 0;
    PACKET p;
    对p的初始化处理...
    len = sizeof(PACKET) + p.datalen -1;
    memcpy(&buffer[0], &len, 4);
    memcpy(&buffer[3], p.packetdata, p.datalen);
    ...