我的socket读事件中有:
    socket.ReceiveBuf(SI,sizeof(si));
其中SI是一个数据结构,有一个类型为pchar的成员apps,
则操作:
    s:=strlen( SI.apps);
或  p:=SI.apps //p已定义为pchar类型
或  Memo1.Line.SetText(SI.apps)
均报内存错误!到底如何读取呢?谢谢各位!

解决方案 »

  1.   

    接收的缓冲区不能用pChar的类型,换成静态数组就行了。
      

  2.   

    可是我的数据是非定长的。所以发送方必需用PCHAR,但接收方如何处理为静态数组呢?
    因为APPS是SI结构的一个成员。
      

  3.   

    错,发送方用包含pChar的结构,数据发出的是错误的。
    pChar指向的地址的数据没有发送出来。你要明白,pChar 是一个指针,指向了一个地址,所以在发送的数据结构缓冲区中,只是包含了这个指针的地址,而没有包含指针的实际内容,而发送整个数据结构,也只是把指针的地址发送过来,没有把指针的实际内容发送过来。
      

  4.   

    用writebuffer(apps^ ,sizeof(apps),true)发送
    readbuffer接受试试
      

  5.   

    SI=record
           field1:integer;
           field2:float;
           apps:pChar;
        end;
    //这样的结构是不能发送的,发送的结果是field1,field2,发送出去,还有apps的地址发送出去了,而apps^的内容没有发送出去。你可以这样做,定义个大数组,然后按照结构的顺序把数据结构的数据写到数组里面,是流的方式,发送这个数组就可以了。
      

  6.   

    又见到gzmhero(hihihi)了,不知道老大你还能不能记起我,我当时问的也是这一类的问题。呵呵……!!!
    告诉搂住,碰上gzmhero(hihihi)算是找对人了
      

  7.   

    介绍写有关SOCKET的教材看看,各位斑竹兄弟。
      

  8.   

    这个不是Socket的问题,是对底层数据结构理解的问题。很多人,只是了解了结构是怎么定义的,而不了解结构的数据是怎样存储的,楼主的问题不单单是在发送接受缓冲会出问题,当进行内存拷贝等操作,同样会出问题。
      

  9.   

    奇怪的是,我用TELNET确确实实能接到PCHAR类型的数据呀!!!
    但在DELPHI中,一处理它,就会出错。我用TSTRINGS类型,也会出错。