Q&A

  • Indy UDP server 이런 황당한 경우가 ....?
udp 장비와 data를 주고 받기 위하여
송신용으로 TIdUDPClient,
수신용으로 TIdUDPServer component를 배치
binding 까지 제대로 해주니
TIdUDPServer의 OnUDPRead event까지는 잘 걸립니다

문제는  OnUDPRead 내에서 receive가 제대로 안된다는점입니다

//OnUDPRead event
procedure TForm1.recvSocketUDPRead(Sender: TObject; AData: TStream;
                                                              ABinding: TIdSocketHandle);
var
    cbRecv:integer;
begin
  //cbRecv:=recvSocket.ReceiveBuffer(recvBuf, BUF_SIZE);   //이게 되야될 것 같은데 잘 안되서
  cbRecv:=aData.size;                                //  이렇게 사용하니 아무 문제가 없습니다
  aData.ReadBuffer(recvBuf, cbRecv);        //


recvSocket.ReceiveBuffer 로는 읽힐 때가 있고
data가 없어 대기하 듯이 못 빠져 나올 때도 있습니다

이에 반해 aData 파라메터를 직접 사용하니 100% 잘 읽힙니다
UDPserver 사용시 추가적인 조치가 필요한건지 이유가 궁금합니다
delphi 7입니다
2  COMMENTS
  • Profile
    최용일 2007.12.03 22:35
    AData파라매터에서 데이터를 읽는게 맞습니다.

    Indy의 UDP Server가 데이터를 소켓으로부터 읽어서 AData에 저장을 한뒤에 OnUDPRead이벤트를 발생시킵니다. 때문에 ReceiveBuffer를 써서 직접 읽으실 필요가 없습니다.

  • Profile
    팍사 2007.12.03 22:43
    도움말을 보니

    TUDPReadEvent is an event type used to notify a TIdUDPServer event handler that data has been received from a socket binding and is available in the buffer.

    라고 되 있네요. 제가 설명을 제대로 안봤네요

    TCP/IP socket 은 써봤는데 UDP쪽은 처음이다 보니....
    답변감사합니다