关于数据转输写了如下程序
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;不能请问是什么原因
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;不能请问是什么原因
bdata: pchar;
bdata := pchar('234|wang');
clientsocket1.Socket.sendbuf(bdata,sizeof(bdata));收的时候再判断是如遇到'|','|'前是的内容赋值给message_hand,'|'后是的内容赋值给message_data。
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;
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;
-------------------------------------------------------
所以你的程序最多只能传送四个字节,所以你永远收不到message_data
发送;
服务端接受socket.data就可以了.
good luck