| 
Indy UDP를 이용한 통신 예제입니다.
Client -> Server -> Client 로 주고 받는 방식이고요,
 
 UDP 특성상 뒤의 Server -> Client는 공유기 단에서 걸러지는 것도 있습니다.
 Indy 버젼은 9.0.11 버젼입니다.
 
 //---------------------------------------------------------------------------
 
 #include <vcl.h>
 #pragma hdrstop
 
 #include "Unit1.h"
 //---------------------------------------------------------------------------
 #pragma package(smart_init)
 #pragma link "IdBaseComponent"
 #pragma link "IdComponent"
 #pragma link "IdUDPBase"
 #pragma link "IdUDPClient"
 #pragma link "IdUDPServer"
 #pragma resource "*.dfm"
 
 TForm1 *Form1;
 
 //---------------------------------------------------------------------------
 
 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
 {
 }
 
 //---------------------------------------------------------------------------
 
 void __fastcall TForm1::FormCreate(TObject *Sender)
 {
 
 IdUDPClient1->Host        = Edit1->Text;
 IdUDPClient1->Port        = StrToIntDef(Edit2->Text, 9999);
 IdUDPServer1->DefaultPort = StrToIntDef(Edit3->Text, 9999);
 
 try {
 IdUDPServer1->Active = true;
 } catch(...) {
 ShowMessage("서버 실행 오류");
 }
 
 }
 
 //---------------------------------------------------------------------------
 
 void __fastcall TForm1::Button1Click(TObject *Sender)
 {
 
 String            stReceive;
 
 
 try {
 // 데이터를 송신
 IdUDPClient1->Send(Memo1->Lines->Text);
 
 // Read 이벤트가 병행 실행될 수 있도록 메시지 프로세싱
 // 한 클라이언트안에 클라이언트/서버 모듈이 동시에 들어있지 않다면 필요가 없습니다
 // 이 것이 없으면 이벤트 순서상 응답 내용이 한번씩 밀려서 처리되게 됩니다.
 Application->ProcessMessages();
 
 // 최대 100ms 만큼 응답 데이터를 대기함
 stReceive = IdUDPClient1->ReceiveString(100);
 
 ShowMessage("송신을 성공했습니다\n응답 내용 : " + stReceive);
 } catch(...) {
 ShowMessage("송신을 실패했습니다");
 }
 
 }
 
 //---------------------------------------------------------------------------
 
 void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender, TStream *AData, TIdSocketHandle *ABinding)
 {
 
 char              *caBuffer;
 String            stBuffer, stSum;
 
 
 if(AData->Size < 3) return;
 
 caBuffer = (char *)malloc(AData->Size + 1);
 AData->Read(caBuffer, AData->Size);
 caBuffer[AData->Size] = 0;
 
 // 수신 내용 표기
 Memo2->Lines->Text = (String)caBuffer;
 
 // 응답 보내기
 ABinding->SendTo(ABinding->PeerIP, ABinding->PeerPort, Memo3->Lines->Text.c_str(), Memo3->Lines->Text.Length());
 
 // 메시지 처리
 Application->ProcessMessages();
 
 free(caBuffer);
 
 }
 
 //---------------------------------------------------------------------------
 
 |