안녕하세요...
소켓으로 바이트 보내고 바이트 받아서 저장하는 문제입니다.
제가 clientsocket 으로 40 바이트를 보내면 서버에서 28 바이트를 보내줍니다.
보내는 부분과 받는 부분을 구현하질 못하겠습니다.
===보내는 부분===
integer 2개 (8 byte)
string 1개 (16 byte)
질문1) 어떻게 정수 와 스트링을 하나의 변수에 그것도 byte 로 만들어서 보낼 수 있습니까?
clientsocket1.socket.sendbuf(??,40);
===받는 부분===
질문2) 받을때는 어떻게 28바이트 중 8byte -> int , 10byte -> string , 10byte -> int 으로 나누어 담을 수 있나요?
끝까지 읽어 주셔서 고맙습니다.
가르쳐 주시면 고맙겠습니다. (--) (__)
즐거운 하루 되세요..
보내고 받는 데이타를 담을 레코드를 선언하시고,
그 레코드형 변수를 생성해서 송수신 하세요.
아래에 간단한 그 예를 들지요.
type
TransferRecord = packed record
idata : array[0..1] of integer;
sdata : string;
end;
var
SendData, ReceiveData : TransferRecord;
procedure ButtonClick....
begin
// 데이타 전송
SendData.idata[0] := 100;
SendData.idata[1] := 200;
SendData.sdata := '전송테스트입니다';
if ClientSocket1.Active then
begin
ClientSocket1.Socket.SendBuf(SendData, SizeOf(SendData));
end;
end;
procedure SocketReadEvent.....
// 데이타 수신
ret : Integer;
begin
ret := ServerSocket1.Socket.Connections[0].ReceiveBuf(ReceiveData, SizeOf(TransferRecord));
if ret = SizeOf(ReceiveData) then
begin
//결과 확인
Memo1.Lines.Add(IntToStr(ReceiveData.idata[0]));
Memo1.Lines.Add(IntToStr(ReceiveData.idata[1]));
Memo1.Lines.Add(ReceiveData.sdata);
end;
end;
위 내용은 온라인으로 퓨도 코드를 막 쓴 내용 이라
오타 및 버그가 숨어있을 수 있습니다.
그렇지만 의미 전달은 충분히 된거 같으니,
잘 참조 하셔서 사용하시길 바랍니다.
그럼 항상 즐거운 프로그래밍 하시길~~