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