TpsmTminTCPServer 클래스를 사용해서 서버를 실행시키고 포트를 오픈했습니다.
TIdTCPClient 클래스를 사용해서 클라이언트를 실행시켰습니다.
클라이언트에서 Connect 를 수행하여 서버에 접속했습니다.
서버는 연결되었다는 이벤트를 잘 받고 소켓을 저장하여 지가 할 일을 잘 수행했습니다.
클라이언트에서 Write 를 하여 서버로 데이터를 전송했습니다.
서버는 데이터 이벤트를 받고 잘 처리 했습니다.
서버가 클라이언트에게 필요한 데이터를 전송했습니다.
클라이언트는 못 받습니다. 도대체 왜 못 받는지 모르겠습니다. ㅠㅠ
TIdTCPClient 와 TpsmTminTCPServer 는 서로 통신을 할 수 없는 건가요?
고수분들의 조언을 기다리겠습니다.
P.S
모르는 부분을 정리하자면,
IdTCPClient->IOHandler->InputBufferIsEmpty()
요녀석...
인풋된 버퍼가 비어있으면 트루를 돌려주는 건지, 펄스를 돌려주는 건지 모르겠습니다. '비어있으면 트루'로 알고 있습니다.
IdTCPClient->IOHandler->InputBuffer->Size
요녀석...
Size 를 따라가보니 int 형인건 알겠는데, 바이트 단위의 사이즈를 말하는 건지, 어떤 사이즈를 말하는 건지 잘 모르겠습니다.
참고로 서버측 소스는 아래와 같이 구현되어 있습니다.
// 서버측 소스
__fastcall 그래그래응응::그래그래응응(널)
{
TCPServer = new TpsmTminTCPServer(NULL);
TCPServer->OnAccept = OnConnect; // 클라이언트가 연결 되었을 때 호출되는 함수
TCPServer->OnClose = ServerClose; // Client 가 Close(Disconnect) 했을때 호출되는 함수
TCPServer->OnData = ReceiveData; // Client 로부터 데이터가 전송되었을 때 호출되는 함수
TCPServer->OnError = ServerError; // Error 발생 시 호출되는 함수
TCPServer->Port = "포트번호"; // 설마... 제가 "포트번호"라고 입력했을 거란 생각을 하신건 아니시겠죠?
// ... 기타 등등
TCPServer->Open(); // 서버 포트 오픈
}
void __fastcall 그래그래응응::ReceiveData(TObject *불른놈, int 소켓)
{
String 메쎄지 = "";
메쎄지 = TCPServer->Read(소켓);
출력해(메쎄지); // 잘 됩니다.
}
void __fastcall 그래그래응응::전송(int 소켓, String 메쎄지)
{
TCPServer->Write(소켓, 메쎄지); // 여기선 보냈습니다.
}
아래는 클라이언트 소스입니다.
// 클라이언트측 소스
void __fastcall TForm1::RecvTimerTimer(TObject *Sender) // 테스트라서 타이머 돌려서 받아오도록 했습니다.
{
int bufSize = 0;
int i = 0;
String recvMsg = "";
if( IdTCPClient->Connected() ) // 연결되었는가 보고
{
if( IdTCPClient->IOHandler->InputBufferIsEmpty() == false ) // 버퍼에 데타가 있으면
{
bufSize = IdTCPClient->IOHandler->InputBuffer->Size; // 싸이즈만큼
recvMsg = IdTCPClient->IOHandler->ReadString(bufSize); // 가져와서 스트링 변수에 여코
if( recvMsg != "" ) Memo1->Lines->Add(recvMsg); // 데이터 있으면 메모에 출력해
}
}
}
//---------------------------------------------------------------------------
|