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
[71972] Re:TUdpSocket 관련 UDP 포트가 열리지 않네요.
송재형 [] 4086 읽음    2014-11-12 21:26
자답입니다.
혹시나 고생하시는 분 위해 올립니다.

보내는 부분은 그냥 TUDP로 구현했구요
받는부분은 IdUDPServer로 구현했습니다.
하지만 받은데이타의 개수는 알수가 없습니다.
AData->Size개 항상 2048로 고정입니다.
782*3BYTE 10ms로 테스트 해봤는데 잘됩니다.

void __fastcall TForm1::UdpConnect()
{
    BYTE buffer[4096];
    UdpSocket1->RemoteHost = TCP_IP->UnitIP->Text;
    UdpSocket1->RemotePort = StrToInt(TCP_IP->Sel_port->Text);
    UdpSocket1->LocalHost  = "192.168.60.1";
    UdpSocket1->LocalPort = StrToInt(TCP_IP->sever_port->Text);
    UdpSocket1->Open();

    IdUDPServer1->BroadcastEnabled=true;
    IdUDPServer1->DefaultPort = StrToInt(TCP_IP->sever_port->Text);
    IdUDPServer1->Active = True;
}

void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
      TStream *AData, TIdSocketHandle *ABinding)
{
    int    size = 782;
    int     len = 0;
    char szBuf[4096]; 

    memset(szBuf, NULL, sizeof(szBuf));
    memset(szBuf1, NULL, sizeof(szBuf1));
    AData->Read(szBuf, 1024);//AData->Size);  데이타가 몇개가 넘어오는지 알수 없음
}


: 장비 자체가 UDP 통신만 지원해서 UDP 짜고 있는데요. 잘안되서 도움 요청합니다.
: 빌더 6.0으로 하고 있습니다.
: 아래는 UDP OPEN 하기 위해 저의한 내용입니다.
:
: void __fastcall TForm1::UdpConnect()
: {
:     BYTE buffer[4096];
:     UdpSocket1->RemoteHost = TCP_IP->UnitIP->Text;  //192.168.60.3
:     UdpSocket1->RemotePort = StrToInt(TCP_IP->Sel_port->Text);  //9008
:     UdpSocket1->LocalHost  = "192.168.60.1";
:     UdpSocket1->LocalPort = StrToInt(TCP_IP->sever_port->Text);  //5634
:     UdpSocket1->Open();
: }
:
: 보내는것은 잘됩니다.
: UdpSocket1->SendBuf(pData, nSize, 0);
:
: 받는 부분에서 UDP 5634 포트가 생성이 되야 되는데 생성이 안됩니다.
: 도스창에서 포트 확인하면 정상적인 포트생성은
: UDP   0.0.0.0:5634  *.*
: 이게 생성이 되야되는데 생성을 하질 않네요. 그래서 UdpSocket1Receive 이벤트가 걸리지 않네요.
: void __fastcall TForm1::UdpSocket1Receive(TObject *Sender, PChar Buf,
:       int &DataLen)
: {
:     int    size = 0;
:     unsigned char szBuf[1024];
:     int    nRecvCount = 0;
:     int     sucess = 0;
:     FILE *fp;
:     SYSTEMTIME  ttt;
:
:     memset(szBuf, 0, sizeof(szBuf));
:     size = UdpSocket1->ReceiveBuf(szBuf, DataLen, size);
:
:     fn_MessageView(szBuf, 1, size, "RX");
:
:     Memo1->Lines->Add((char *)szBuf);
:      if( CheckBox1->Checked == true)
:      {
:         GetLocalTime(&ttt);
:         sprintf(time_save,"%04d%02d%02d%02d.txt", ttt.wYear, ttt.wMonth, ttt.wDay, ttt.wHour);
:         fp = fopen(time_save, "ab+");
:         fprintf(fp, "%02d:%02d:%02d.%03d RX ", ttt.wHour, ttt.wMinute, ttt.wSecond, ttt.wMilliseconds);
:         for(int i=0;i<size;i++)
:             fprintf(fp, "%02X ", szBuf[i]);
:
:         fprintf(fp, "\n");
:         fclose(fp);
:      }
: }
: 구글링 및 참고 자료를 아무리 찾아봐도 저와 같은 사례가 많이 있었는데 해답은 없네요.
:
: 다른 방법으로 리시브 하는 부분만 TNMUDP로 구현을 해 봤습니다.
: 포트 생성하고 리시브 이벤트에 잘들어오는데
: void __fastcall TForm1::NMUDP1DataReceived(TComponent *Sender,
:       int NumberBytes, AnsiString FromIP, int Port)
: {
:     int    size = 0;
:     char szBuf[1024];
:     int    nRecvCount = 0;
:     memset(szBuf, 0, sizeof(szBuf));
:   NMUDP1->ReadBuffer(szBuf, 1024, nRecvCount);
: }
: ReadBuffer에서 아래와 같이 에러창이 뜹니다.
: access violation at 0x00000000: read of address 0x00000000'. Process Stopped. Use Step or Run To continue
: 뭘 잘못 한것지 모르겠습니다.
:
: 혹시 아시는 고수님들 답변 부탁드립니다.
:
:

+ -

관련 글 리스트
71971 TUdpSocket 관련 UDP 포트가 열리지 않네요. 전자컴맹 4018 2014/11/12
71972     Re:TUdpSocket 관련 UDP 포트가 열리지 않네요. 송재형 4086 2014/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.