|
안녕하세요!!
패킷을 구성해서 indy udp로 주고 받으려고 하는데요..
서버 쪽에서는 그냥 잘 보냈다고 아무 문제없다고 하는데..
클라이언트쪽에서 Abnormal program termination 라는 에러가 뜨면서 프로그램이 그냥 종료되거덩여..
//메시지를 보내라..
void __fastcall TForm1::btnSendClick(TObject *Sender)
{
if(editServerIP->Text == ""){
ShowMessage("접속할 서버 IP주소를 입력하세요.");
return;
}
if(memoSend->Lines->Text == ""){
ShowMessage("보낼 메세지를 입력하세요.");
return;
}
try {
//보낼 패킷을 구성..
UDP udpPacket;
//컴터 이름을 구하기 위해..
char ComputerNameBuff[MAX_COMPUTERNAME_LENGTH+1];
unsigned long ComputerNameLength = MAX_COMPUTERNAME_LENGTH+1;
GetComputerName( ComputerNameBuff, &ComputerNameLength );
udpPacket.Name = ComputerNameBuff;
udpPacket.MSG = memoSend->Text.c_str();
// 데이터를 보내라..
udpClient->Host = editServerIP->Text;
udpClient->SendBuffer(&udpPacket, sizeof(UDP));
Application->ProcessMessages();
ShowMessage("잘 보냈다!!");
} catch(...) {
ShowMessage("에러다!!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::udpServerUDPRead(TObject *Sender, TStream *AData,
TIdSocketHandle *ABinding)
{
String Name, MSG;
UDP_RE udpRePacket;
//데이터가 없으면 버려라..
if(AData->Size < 0) return;
AData->Read(&udpRePacket, AData->Size);
Name = udpRePacket.Name;
MSG = udpRePacket.MSG;
// 받은 내용 표시
memoReceive->Lines->Add(Name);
memoReceive->Lines->Add(MSG);
Application->ProcessMessages();
}
//---------------------------------------------------------------------------
그리고 패킷을 구성하는 내부는 UDP랑 UDP_RE랑 둘다 이렇게 했거든여..
class UDP
{
public:
String Name ;
String MSG ;
__fastcall UDP()
{
Name = "" ;
MSG = "" ;
}
};
게시판에서 예제 찾아서 그냥 String값 주고 받는건 잘 했는데요~
이렇게 하니까 에러가 나네요...왜그럴까요...ㅠ.ㅠ 알려주세요!!
|