Q&A

  • 답변듣고도 해결못한 소켓문제..(김용덕님 지성)
안녕하세요...

소켓으로 바이트 보내고 바이트 받아서 저장하는 문제입니다.

제가 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 으로 나누어 담을 수 있나요?

끝까지 읽어 주셔서 고맙습니다.

가르쳐 주시면 고맙겠습니다.  (--) (__)

즐거운 하루 되세요..
1  COMMENTS
  • Profile
    구창민 2002.12.03 19:29
    안녕하세요 구창민입니다.

    보내고 받는 데이타를 담을 레코드를 선언하시고,

    그 레코드형 변수를 생성해서 송수신 하세요.

    아래에 간단한 그 예를 들지요.

    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;

    위 내용은 온라인으로 퓨도 코드를 막 쓴 내용 이라
    오타 및 버그가 숨어있을 수 있습니다.
    그렇지만 의미 전달은 충분히 된거 같으니,
    잘 참조 하셔서 사용하시길 바랍니다.
    그럼 항상 즐거운 프로그래밍 하시길~~