무슨 에러가 발생했는지 명시가 안되있으면 C# 도 마찬가지로 답변할 수 없어요.
아래 코드는 최신 툴에서 잘 동작한 코드입니다.
"에러가 나네 내가 쓴 코드가 무슨 문제가 있지?" 로 접근하면 문제 해결은 항상 어렵습니다.
에러 메세지를 해석해서 내용을 보셔야합니다.
님이 쓰신 글 :
: 조언해주신대로 했는데 MainForm->IdUDPClient1->ReceiveBuffer(RcvBuf); 에서 에러발생하네요
: 혹시 stReceive=MainForm->IdUDPClient1->ReceiveString(100); 에서 얻은 스트링 데이터를 hex로 변환하는
: 방법이 있을까요??
: c#과 다르게 빌더는 구굴링 자료를 찾아볼 수 가 없어요ㅠㅠ
: 막힐때마다 힘이 들어서 ㅠㅠ 이참에 갈아타야하는지도 고민중입니다.~
:
:
: void __fastcall TMainForm::Button_UdpConnectClick(TObject *Sender)
: {
: unsigned char sendBuf[1000], receiveBuf[1000];
: int i, Len, Port;
: void *Data;
: unsigned char Ip[4];
:
: String stReceive;
:
:
: TBytes RcvBuf;
: RcvBuf.Length = 1000;
:
:
: if(MainForm->Button_UdpConnect->Caption=="UDP Disconnect"){
: MainForm->IdUDPServer1->Active=false;
: MainForm->IdUDPClient1->Active=false;
: MainForm->Button_UdpConnect->Caption="UDP Connect";
: stReceive=MainForm->IdUDPClient1->ReceiveString(100);
: }
: else{
: //MainForm->IdUDPClient1->ReceiveBuffer()
: MainForm->IdUDPClient1->Host = "192.168.0.20";
: MainForm->IdUDPClient1->Port = 3000;
: MainForm->IdUDPClient1->ReceiveTimeout = 5000;
: MainForm->IdUDPServer1->Active=true;
: MainForm->IdUDPClient1->Active=true;
:
: Len=100;
: for(i=0; i<Len; i++){
: sendBuf[i]=i;
: }
: Ip[0]=StrToInt(MainForm->Edit_Ip1->Text);
: Ip[1]=StrToInt(MainForm->Edit_Ip2->Text);
: Ip[2]=StrToInt(MainForm->Edit_Ip3->Text);
: Ip[3]=StrToInt(MainForm->Edit_Ip4->Text);
:
: Port=StrToInt(MainForm->Edit_Port->Text);
: sprintf(sTemp,"%d.%d.%d.%d",Ip[0],Ip[1],Ip[2],Ip[3]);
: //MainForm->IdUDPClient1->SendBuffer("192.168.0.20", 3000, RawToBytes(sendBuf, Len));
: MainForm->IdUDPClient1->SendBuffer(sTemp, Port, RawToBytes(sendBuf, Len));
: //MainForm->IdUDPClient1->Send("test");
:
:
:
: //stReceive=MainForm->IdUDPClient1->ReceiveString(100); //=>ok
: MainForm->IdUDPClient1->ReceiveBuffer(RcvBuf); //=>???
: MainForm->Button_UdpConnect->Caption="UDP Disconnect";
: }
: }
:
:
:
:
:
:
:
:
:
:
:
:
:
: 아루스 님이 쓰신 글 :
: : 수신 버퍼로 TBytes 를 사용하시면 됩니다.
: : TIdUDPClient::ReceiveBuffer의 첫 인자는 모두 TIdBytes& 이며, TBytes와 호환됩니다.
: :
: : TBytes RcvBuf;
: : RcvBuf.Length = 1000;
: :
: : MainForm->IdUDPClient1->ReceiveBuffer(RcvBuf);
: :
: : 초보남 님이 쓰신 글 :
: : : 빌더 10.2 사용중입니다.
: : : udp send 정상 동작하고 rcv 테스트중에 IdUDPClient1->ReceiveString은 스트링으로 정상 수신되나
: : : hex값으로 받기 위해 IdUDPClient1->ReceiveBuffer은 컴파일 에러가 납니다.
: : : IdUDPClient1->ReceiveBuffer로 수신할 방법이 있는지요?
: : :
: : :
: : :
: : : void __fastcall TMainForm::Button_UdpConnectClick(TObject *Sender)
: : : {
: : : unsigned char sendBuf[1000], RcvBuf[1000];
: : : int i, Len, Port;
: : : void *Data;
: : : unsigned char Ip[4];
: : : String stReceive;
: : :
: : : if(MainForm->Button_UdpConnect->Caption=="UDP Disconnect"){
: : : MainForm->IdUDPServer1->Active=false;
: : : MainForm->IdUDPClient1->Active=false;
: : : MainForm->Button_UdpConnect->Caption="UDP Connect";
: : : stReceive=MainForm->IdUDPClient1->ReceiveString(100);
: : : }
: : : else{
: : : //MainForm->IdUDPClient1->ReceiveBuffer()
: : : MainForm->IdUDPClient1->Host = "192.168.0.20";
: : : MainForm->IdUDPClient1->Port = 3000;
: : : MainForm->IdUDPClient1->ReceiveTimeout = 5000;
: : : MainForm->IdUDPServer1->Active=true;
: : : MainForm->IdUDPClient1->Active=true;
: : :
: : : Len=100;
: : : for(i=0; i<Len; i++){
: : : sendBuf[i]=i;
: : : }
: : : Ip[0]=StrToInt(MainForm->Edit_Ip1->Text);
: : : Ip[1]=StrToInt(MainForm->Edit_Ip2->Text);
: : : Ip[2]=StrToInt(MainForm->Edit_Ip3->Text);
: : : Ip[3]=StrToInt(MainForm->Edit_Ip4->Text);
: : :
: : : Port=StrToInt(MainForm->Edit_Port->Text);
: : : sprintf(sTemp,"%d.%d.%d.%d",Ip[0],Ip[1],Ip[2],Ip[3]);
: : : //MainForm->IdUDPClient1->SendBuffer("192.168.0.20", 3000, RawToBytes(sendBuf, Len));
: : : MainForm->IdUDPClient1->SendBuffer(sTemp, Port, RawToBytes(sendBuf, Len));
: : : //MainForm->IdUDPClient1->Send("test");
: : :
: : :
: : :
: : : //stReceive=MainForm->IdUDPClient1->ReceiveString(100); //=>ok
: : : MainForm->IdUDPClient1->ReceiveBuffer(RcvBuf, sizeof(RcvBuf)); //=>nok
: : : MainForm->Button_UdpConnect->Caption="UDP Disconnect";
: : : }
: : : }
|