질문>
제가 그래도 해봤는데여..
일단은 Clientsocket.socket.Receivebuf(P,Size(P));
로 받았잖아요..
용일님이 말씀하신대로면 DataReceive.Re[1]에 보낸 데이타를 어떻게 넣는지가 궁금합니다.
전체적으로 다시 정리하면
Record를 SendStream으로 보냈쟎아요..
그러면 ClientSocket에서는
type
DataReceive = packed record
Re : Array[1..3] of double;
end;
procedure ClientSocket.Read(..)
var
P : DataReceive;
begin
ClientSocket.Socket.ReceiveBuf(P, SizeOf(P));
로 받쟎아요..
그러면 저는 서버에서 보낸 첫번째 값 P.Data[1]:=10.000을 클라이언트에서는
결국 P.Re[1]에 10.000이 들어가야한는데..
P.Re[1]:=?
P.Re[2]:=?
P.Re[3]:=?
을 어떻게 해야 서버에서 보낸 P.Data[1]:=10.000을 P.Re[1]으로
P.data[2]:=20.000을 P.Re[2]에 받게 하는지를 잘 모르겠어여..
이 부분좀 자세히 설명좀 해주세여..
그리고
제가 연습했던 부분은 다음과 같습니다.
서버부분
------------------------------------
unit se;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
Packet = Packed Record
DataSend : Array[1..3] of Double;
end;
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
P : Packet;
S : TMemoryStream;
begin
S:=TMemoryStream.Create;
P.DataSend[1]:=10;
P.DataSend[2]:=20;
P.DataSend[3]:=30;
S.write(P,Sizeof(P));
Try
ServerSocket1.Socket.SendStream(S);
finally
S.Free;
end;
end;
end.
클라이언트 부분
-----------------------------------------
unit re;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
DataReceive = Packed Record
Data : Array[1..3] of Double;
end;
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Active:=True;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var P : DataReceive;
begin
ClientSocket1.Socket.ReceiveBuf(P,Sizeof(P));
Memo1.Lines.Add(FloatToStr(P.Data[1]));
Memo1.Lines.Add(FloatToStr(P.Data[2]));
Memo1.Lines.Add(FloatToStr(P.Data[3]));
end;
end.
-----------------------------------------------
Error가 나오는데..뭔질 모르겠어요..
어디가 잘못됐는지 부탁드립니다.
급해서 그런데요..빠른답변 부탁드립니다.
그런데 답변을 올리신 최용일님께서도 더 이상 알기가 어려우나 Re: Array[1..3] of string; 으로
선언된 부분이 문제가 있지 않겠느냐고 하셨습니다.
저도 원인을 잘 모르겠습니다...
디버깅을 좀 더 해보신 후에 그래도 안되시면 디버깅 해보신 내용을 적어주시면 또 생각해보겠습니다...
찾는이 wrote:
> 질문>
> 제가 그래도 해봤는데여..
> 일단은 Clientsocket.socket.Receivebuf(P,Size(P));
> 로 받았잖아요..
> 용일님이 말씀하신대로면 DataReceive.Re[1]에 보낸 데이타를 어떻게 넣는지가 궁금합니다.
>
> 전체적으로 다시 정리하면
> Record를 SendStream으로 보냈쟎아요..
> 그러면 ClientSocket에서는
> type
> DataReceive = packed record
> Re : Array[1..3] of double;
> end;
>
> procedure ClientSocket.Read(..)
> var
> P : DataReceive;
> begin
> ClientSocket.Socket.ReceiveBuf(P, SizeOf(P));
> 로 받쟎아요..
> 그러면 저는 서버에서 보낸 첫번째 값 P.Data[1]:=10.000을 클라이언트에서는
> 결국 P.Re[1]에 10.000이 들어가야한는데..
> P.Re[1]:=?
> P.Re[2]:=?
> P.Re[3]:=?
> 을 어떻게 해야 서버에서 보낸 P.Data[1]:=10.000을 P.Re[1]으로
> P.data[2]:=20.000을 P.Re[2]에 받게 하는지를 잘 모르겠어여..
> 이 부분좀 자세히 설명좀 해주세여..
> 그리고
>
> 제가 연습했던 부분은 다음과 같습니다.
>
> 서버부분
> ------------------------------------
> unit se;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls, ScktComp;
>
> type
> Packet = Packed Record
> DataSend : Array[1..3] of Double;
> end;
> TForm1 = class(TForm)
> ServerSocket1: TServerSocket;
> Button1: TButton;
> procedure FormCreate(Sender: TObject);
> procedure Button1Click(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> ServerSocket1.Active:=True;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> P : Packet;
> S : TMemoryStream;
> begin
> S:=TMemoryStream.Create;
> P.DataSend[1]:=10;
> P.DataSend[2]:=20;
> P.DataSend[3]:=30;
> S.write(P,Sizeof(P));
> Try
> ServerSocket1.Socket.SendStream(S);
> finally
> S.Free;
> end;
> end;
> end.
>
> 클라이언트 부분
> -----------------------------------------
> unit re;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls, ScktComp;
>
> type
> DataReceive = Packed Record
> Data : Array[1..3] of Double;
> end;
> TForm1 = class(TForm)
> ClientSocket1: TClientSocket;
> Memo1: TMemo;
> procedure FormCreate(Sender: TObject);
> procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> ClientSocket1.Active:=True;
> end;
>
> procedure TForm1.ClientSocket1Read(Sender: TObject;
> Socket: TCustomWinSocket);
> var P : DataReceive;
> begin
> ClientSocket1.Socket.ReceiveBuf(P,Sizeof(P));
> Memo1.Lines.Add(FloatToStr(P.Data[1]));
> Memo1.Lines.Add(FloatToStr(P.Data[2]));
> Memo1.Lines.Add(FloatToStr(P.Data[3]));
> end;
> end.
> -----------------------------------------------
> Error가 나오는데..뭔질 모르겠어요..
> 어디가 잘못됐는지 부탁드립니다.
> 급해서 그런데요..빠른답변 부탁드립니다.
>
>