C++ Builder/Control

#IdTCPServer

딸기우유중독 2019. 1. 8. 16:54

#IdTCPServer


void __fastcall TForm1::IdTCPServer1Connect(TIdContext *AContext)

{

AnsiString IP = "Connect : " + AContext->Binding->PeerIP;

ListBox1->Items->Add(IP);

}

// 현재 접속된 Client의 IP주소를 읽어서 ListBox에 Display한다.

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

void __fastcall TForm1::IdTCPServer1Disconnect(TIdContext *AContext)

{

AnsiString IP = "Disconnect : " + AContext->Binding->PeerIP;

ListBox1->Items->Add(IP);

}


//Disconnect할 Client의 IP주소를 읽어서 ListBox에 Display한다.


void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)

{

AnsiString Message;

try{

Message = AContext->Connection->IOHandler->ReadLn("", enUTF8);       

 //    Client로부터의 입력을 대기

}catch(...){

Close();

}



ListBox1->Items->Add(Message);

AContext->Connection->Socket->WriteLn(Message, enUTF8);

AnsiString Name = GetData(Message, "Name");

AnsiString 메세지내용 = GetData(Message, "Msg"); // 한글변수 사용가능.

AnsiString temp = Name +": " + 메세지내용;

ListBox1->Items->Add(temp);

}


AnsiString __fastcall TForm1::GetData(AnsiString AllMsg, AnsiString SubMsg) //GetData함수 사용자정의 { int iInitPos = AllMsg.Pos(SubMsg+"=")+(SubMsg+"=").Length(); // (SubMsg+"=") 문자열 뒤의 pos를 저장. int iCommaPos = AllMsg.Pos(","); int iLastPos = AllMsg.Length(); if(iInitPos<iCommaPos){ return AllMsg.SubString(iInitPos, iCommaPos-iInitPos);
// iInitPos 번째 문자열부터 iCommaPos-iInitPos길이만큼의 문자열을 출력 }else{ return AllMsg.SubString(iInitPos, iLastPos); } }

// =======IdTCPServer1의 Properties 에서 Intercept를 설정해야 작동.=======
void __fastcall TForm1::IdServerInterceptLogEvent1LogString(TIdServerInterceptLogEvent *ASender,
  const UnicodeString AText)
{
ListBox2->Items->Add(AText);
}

출처:http://www.realhanbit.co.kr/books/188/pages/1946/preview



728x90