C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35997] Re:[급구]Indy 9 의 UDPServer와 UDPClient를 이용한 간단한 UDP통신 프로그램 예제를 구합니다.
유영인 Cuperido [cuperido] 1814 읽음    2004-07-01 13:34
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_res&no=261
에 실행 파일과 프로젝트 올려 두었습니다.

BCB 5 버젼이고, Indy 버젼은 9.0.11 버젼입니다.

아시겠지만 UDP 특성상 데이터가 정확히 도달하지 않기 때문에, 차후 SUM Code 등으로 데이터가
정확히 맞는지 체크, 또한 데이터 수신 순서도 체크하셔서 더욱 정확한 수신이 될 수 있도록
강화 하시면 좋으실것 같습니다.

좋은 프로그램 만드시기 바랍니다.

cuperido


//---------------------------------------------------------------------------

#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);

}

//---------------------------------------------------------------------------


김준원 님이 쓰신 글 :
: 오랬동안 알아보고 있지만 아직도 풀리고 있지를 않습니다.
: 혹 간단한 예제 소스를 가지고 계신분은 부탁드립니다.
:
: 컴파일해서 돌아가는것을 확인해 볼 수 있도록 가급적 프로젝트 내용을 압축해서 부탁드립니다.
:
: UDP를 이용하여 특정 IP의 대상과 통신을 할때 (ex.글자,숫자)정보를 전달하는것과 수신하는것의 방법을 간단히 알아볼 수 있게끔 해주시면 감사하겠습니다.

+ -

관련 글 리스트
35996 [급구]Indy 9 의 UDPServer와 UDPClient를 이용한 간단한 UDP통신 프로그램 예제를 구합니다. 김준원 1139 2004/07/01
35997     Re:[급구]Indy 9 의 UDPServer와 UDPClient를 이용한 간단한 UDP통신 프로그램 예제를 구합니다. 유영인 Cuperido 1814 2004/07/01
35999         Re:Re:[급구]Indy 9 의 UDPServer와 UDPClient를 이용한 간단한 UDP통신 프로그램 예제를 구합니다. 김준원 1554 2004/07/01
36000             Re:Re:Re:[급구]Indy 9 의 UDPServer와 UDPClient를 이용한 간단한 UDP통신 프로그램 예제를 구합니다 유영인 Cuperido 1547 2004/07/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.