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
[40133] 답변 감사합니다!!!
빵샹시 [bread32] 1419 읽음    2005-05-12 11:57
답변 감사합니다~~~
패킷의 구조체를 char*형으로 하니까 잘 되더라고요~~ㅎㅎㅎ
맞게 한건진 모르겠는데...
그런데...
처음 보내서 받는부분에서는 UDPRead이벤트를 실행하는데 보낸쪽에서 Receive할때는 UDPRead이벤트가 실행되지 않던데...이걸 실행시킬 방법은 없을까요?
밑부분은 제가 다시 짠 소스입니다...알려주세요!!!

//메시지를 보내라..
void __fastcall TForm1::btnSendClick(TObject *Sender)
{

if(editServerIP->Text == ""){
   ShowMessage("접속할 서버 IP주소를 입력하세요.");
   return;
}

if(memoSend->Lines->Text == ""){
   ShowMessage("보낼 메세지를 입력하세요.");
   return;
}

try {

  //보낼 패킷을 구성..
  UDP udpPacket;
  UDP udpRePacket;

  char ComputerNameBuff[MAX_COMPUTERNAME_LENGTH+1];
  unsigned long ComputerNameLength = MAX_COMPUTERNAME_LENGTH+1;
  GetComputerName( ComputerNameBuff, &ComputerNameLength );

  StrCopy( udpPacket.Name, ComputerNameBuff );
  StrCopy( udpPacket.MSG, memoSend->Text.c_str() );


  // 데이터를 보내라..
  udpClient->Host = editServerIP->Text;
  udpClient->SendBuffer(&udpPacket, sizeof(UDP));
  ShowMessage("송신을 성공했습니다");

  Application->ProcessMessages();

  // 최대 1000ms = 1sec 만큼 응답 데이터를 대기함
  udpClient->ReceiveBuffer(&udpRePacket, sizeof(UDP), 1000);
  udpReadEvent((char*)udpRePacket.Name, (char*)udpRePacket.MSG, udpClient->Host);

  } catch(...) {
   ShowMessage("송신을 실패했습니다");

}

}

//패킷을 받았을때 ..
//---------------------------------------------------------------------------
void __fastcall TForm1::udpServerUDPRead(TObject *Sender, TStream *AData,
      TIdSocketHandle *ABinding)
{
  static char *Name, *MSG;
  static UDP udpRePacket;            //처음 받았을때..
  static UDP  ReudpPacket;           // 다시 보낼때...

  if(AData->Size < 0) return;

  AData->Read(&udpRePacket, AData->Size);

  Name = udpRePacket.Name;
  MSG  = udpRePacket.MSG;

  // 수신 내용 표기
  memoReceive->Lines->Add( Name );
  memoReceive->Lines->Add( MSG );

  lbClientIP->Caption = ABinding->PeerIP;
  lbMyIP->Caption = ABinding->IP;

  //보낼 패킷을 구성..   이건 보낼때 ReceiveBuffer에서 받아보는 부분이다.

  char ComputerNameBuff[MAX_COMPUTERNAME_LENGTH+1];
  unsigned long ComputerNameLength = MAX_COMPUTERNAME_LENGTH+1;
  GetComputerName( ComputerNameBuff, &ComputerNameLength );

  StrCopy( ReudpPacket.Name, ComputerNameBuff );
  StrCopy( ReudpPacket.MSG, memoSend->Text.c_str() );

  // 데이터를 보내라..
  ABinding->SendTo(ABinding->PeerIP, ABinding->PeerPort, &ReudpPacket, sizeof(UDP));

Application->ProcessMessages();

}


//------------------------------------------------------------------------------------------
//udpread이벤트를 대신...처음 보낼때 receive받은 응답처리..
void __fastcall TForm1::udpReadEvent(String Name, String MSG, String Addr)
{
  memoReceive->Clear();
  memoReceive->Lines->Add("컴터이름 : " + Name);
  memoReceive->Lines->Add("메세지 : " + MSG);
  lbClientIP->Caption = Addr;
}

+ -

관련 글 리스트
40103 Abnormal program termination이라는 에러가 생기면서 프로그램이 종료되요.. 빵샹시 3786 2005/05/10
40115     Re:Abnormal program termination이라는 에러가 생기면서 프로그램이 종료되요.. 이진수 3590 2005/05/11
40133         답변 감사합니다!!! 빵샹시 1419 2005/05/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.