关于数据转输写了如下程序
client端type
     csdata=record
     message_hand:string[8];
     message_data:string[10];end;
pmycsdata=^csdata;
var
  Form1: TForm1;
  data:pmycsdata;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
new(data);
data^. message_hand:='234';;
data^.message_data:='wang';
clientsocket1.Socket.sendbuf(data^,sizeof(data));
end;
server端 
type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 type
     q=^csdata;
     csdata=record
     message_hand:string[8];
     message_data:string[10];
end;var
  Form1: TForm1;
  data:q;
implementation{$R *.DFM}procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);begin         getmem(data,length);
         
         Socket.receivebuf(data^,socket.receivelength);
         edit2.text:=data^.message_hand;
         edit1.text:=data^.message_data;
       end;
我认为程序写的没有什么错误但是在接收里只有data^.message_hand字段能够接收到而data^.message_data;不能请问是什么原因

解决方案 »

  1.   

    当然不行,你定义了一个记录类型在Client端, 但是发送数据时,没有这种所谓指针的记录的发送,它只能是以字符指针来发送,也一是说,只能算是一串的字符串,这串字符串是没任何的记录结构。所以在Server接收时,这只是一串字符串,默认为是记录类型的第一个变量才有值。
      

  2.   

    最间单的方法只能可以这样写:
    bdata: pchar;
    bdata := pchar('234|wang');
    clientsocket1.Socket.sendbuf(bdata,sizeof(bdata));收的时候再判断是如遇到'|','|'前是的内容赋值给message_hand,'|'后是的内容赋值给message_data。 
      

  3.   

    应该是可以传送的,我已经试验成功,你可能是Server端的Record解构和Client端的不一样所致。
    type
         csdata=record
         message_hand:string[8];
         message_data:string[10];end;------------ type
         q=^csdata;
         csdata=record
         message_hand:string[8];
         message_data:string[10];
    end;
    我的例子如下:
    type
        MyData= record
            str1: String[9];
            Str2: String[9];
        end;type
      TForm1 = class(TForm)
        s1: TServerSocket;
        c1: TClientSocket;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure s1ClientWrite(Sender: TObject; Socket: TCustomWinSocket);
        procedure s1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    begin
        s1.Open;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        c1.Open;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
        ddData: MyData;
    begin
        ddData.str1:= '12345';
        ddData.Str2:= '67890';
        c1.Socket.SendBuf(ddData, SizeOf(ddData));
    end;procedure TForm1.s1ClientWrite(Sender: TObject; Socket: TCustomWinSocket);
    var
        dData: MyData;
    begin
        Socket.ReceiveBuf(dData, Sizeof(dData));
        Memo1.Lines.Add(dData.Str1);
        Memo1.Lines.Add(dData.Str2);
    end;procedure TForm1.s1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var
        dData: MyData;
    begin
        Socket.ReceiveBuf(dData, Sizeof(dData));
        Memo1.Lines.Add(dData.Str1);
        Memo1.Lines.Add(dData.Str2);end;
      

  4.   

    Client修改:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    new(data);
    data^. message_hand:='234';;
    data^.message_data:='wang';
    //clientsocket1.Socket.sendbuf(data^,sizeof(data));
      clientsocket1.Socket.sendbuf(data^,sizeof(data^));
    end;-----------------------------------------------
    Server修改:
             //getmem(data,length);
             new(data);
             
             //Socket.receivebuf(data^,socket.receivelength);
             Socket.receivebuf(data^,Sizeof(Data^));         edit2.text:=data^.message_hand;
             edit1.text:=data^.message_data;
    -------------------------------------------------------
      

  5.   

    你的Client送了一个指针的长度clientsocket1.Socket.sendbuf(data^,sizeof(data));
    所以你的程序最多只能传送四个字节,所以你永远收不到message_data
      

  6.   

    谢谢errorcode(errorcode) 是我平时很常使用指针所至 成功了给分
      

  7.   

    将对应结构负值给ClientSocket1.Socket.data指针;
    发送;
    服务端接受socket.data就可以了.
    good luck