델파이로 구조체를 만들어서 서버로 데이타를 보낼려고합니다
서버는 C 로 되어있습니다.
typedef struct
{
char Msg_Type [4+1];
char Dept_Code [10+1];
char Data_Class;
char File_Name [24+1];
char Filler [51+1];
} Ssg_File_Recv_Start_Msg;
이게 서버쪽에 선언된 구조체구여
델파이쪽에선
type aa = record
Msg_Type : array [0..3] of char;
Dept_Code : array [0..9] of char;
Data_Class : char;
File_Name : array [0..23] of char;
Filler : array [0..50] of char;
end;
이렇게 선언했거든요
구조체단위로 패킷을 만들어서 서버로 데이타를 날려줄려고 합니다
여기에 있는 질답란을 뒤져보고 그대로 했는데
서버쪽에서 클라이언트 접속 신호만 받고 실제로 패킷을 받지 못하는거 같습니다
procedure TForm1.Button1Click(Sender: TObject);
type aa = record
Msg_Type : array [0..3] of char;
Dept_Code : array [0..9] of char;
Data_Class : char;
File_Name : array [0..23] of char;
Filler : array [0..50] of char;
end;
var
Packet : aa;
mem : TMemoryStream;
begin
Packet.Msg_Type := 'FT12';
Packet.Dept_Code := 'SSG00003';
Packet.Data_Class := '0';
Packet.File_Name := 'FT12.c';
Packet.Filler := 'FTP';
mem := TMemoryStream.Create;
mem.Write(Packet, sizeof(Packet));
clientsocket1.Address := '211.xxx.xx.xx';
clientsocket1.Port := 5005;
clientsocket1.Active := true;
clientsocket1.socket.SendStream(mem);
end;
초보라서 저게 무슨뜻인지도 모르고 그대로 따라했습니다
왜 데이타를 받지 못하는걸까요..
조언 부탁드리겠습니다
> 델파이로 구조체를 만들어서 서버로 데이타를 보낼려고합니다
>
> 서버는 C 로 되어있습니다.
>
> typedef struct
> {
> char Msg_Type [4+1];
> char Dept_Code [10+1];
> char Data_Class;
> char File_Name [24+1];
> char Filler [51+1];
> } Ssg_File_Recv_Start_Msg;
>
> 이게 서버쪽에 선언된 구조체구여
>
> 델파이쪽에선
>
> type aa = record
> Msg_Type : array [0..3] of char;
> Dept_Code : array [0..9] of char;
> Data_Class : char;
> File_Name : array [0..23] of char;
> Filler : array [0..50] of char;
> end;
>
> 이렇게 선언했거든요
>
> 구조체단위로 패킷을 만들어서 서버로 데이타를 날려줄려고 합니다
>
> 여기에 있는 질답란을 뒤져보고 그대로 했는데
>
> 서버쪽에서 클라이언트 접속 신호만 받고 실제로 패킷을 받지 못하는거 같습니다
>
> procedure TForm1.Button1Click(Sender: TObject);
> type aa = record
> Msg_Type : array [0..3] of char;
> Dept_Code : array [0..9] of char;
> Data_Class : char;
> File_Name : array [0..23] of char;
> Filler : array [0..50] of char;
> end;
> var
> Packet : aa;
> mem : TMemoryStream;
> begin
>
> Packet.Msg_Type := 'FT12';
> Packet.Dept_Code := 'SSG00003';
> Packet.Data_Class := '0';
> Packet.File_Name := 'FT12.c';
> Packet.Filler := 'FTP';
>
> mem := TMemoryStream.Create;
>
> mem.Write(Packet, sizeof(Packet));
>
> clientsocket1.Address := '211.xxx.xx.xx';
> clientsocket1.Port := 5005;
>
> clientsocket1.Active := true;
> clientsocket1.socket.SendStream(mem);
> end;
>
>
> 초보라서 저게 무슨뜻인지도 모르고 그대로 따라했습니다
>
> 왜 데이타를 받지 못하는걸까요..
>
> 조언 부탁드리겠습니다
의외로 간단할 수 있겠군요....
많은 분들이 아마도 그 넘때문에 골때리는 에러가 발생합니다.... 알고보면 별거 아니지만요... 델파이에 기본적으로 들어있는 ClientSocket은 그 윗넘한테 상속받는 형태로 되어있는데 그 제일 위넘이 하는 SendStream의 소스가...
while True do
begin
StartPos := FSendStream.Position;
AmountInBuf := FSendStream.Read(Buffer, SizeOf(Buffer));
if AmountInBuf > 0 then
begin
AmountSent := send(FSocket, Buffer, AmountInBuf, 0);
부분적으로 이렇게 되어있죠... 소스를 보면 아시겠지만...
스트림 전체를 버퍼로 잡아서 보내는게 아니고 현재의 포지션에서 읽기때문에 님의 문제는 스트림.position := 0;이라는 간단한 문장을 보내기 직전에 해주시면 해결될것 같군요... 그리고 아시겠지만 이넘은 DropStream이라는 내부함수를 부르기때문에 걔가 알아서 스트림을 없애주므로 보낸후에 Free를 시키면 걍.. 에러납니다...
왜 이렇게 맹글었는지는 모르겠지만 많은 분들이 본인의 실수로 오인하면 시간을 뺏기는 부분중 하나입니다.... 그럼 해결을 기대하면서...