티스토리 뷰
// 서버 연결
char __fastcall ServerConnect(void)
{
if(m_TcpClient->Connected()) m_TcpClient->Disconnect();
struct hostent *pHostEnt;
unsigned char IP[4];
AnsiString Addr;
// 도메인 이름으로 IP주소 알아오기
pHostEnt = gethostbyname(SERVER_HOST);
memcpy(IP, pHostEnt->h_addr, 4);
Addr.sprintf("%d.%d.%d.%d", IP[0], IP[1], IP[2], IP[3]);
m_TcpClient->Host = Addr;
m_TcpClient->Port = SERVER_PORT;
try {
m_TcpClient->Connect();
} catch(...) {
m_SenderLog.WriteLogString("TCP 서버 연결 중 오류");
return FALSE;
}
// Rcv 스레드 생성
m_bRcvThreadActive = TRUE;
CreateThread(NULL, 0, RcvThread, this, 0, NULL);
m_SenderLog.WriteLogString("TCP 서버 연결 성공.");
return TRUE;
}
// 보내기
void __fastcall SendData(char * SendBuffer, int SendLen)
{
m_TcpClient->WriteBuffer(SendBuffer, SendLen);
ComDebugDisplay(SEND_TYPE, SendBuffer, SendLen);
}
// 받기
1. RCV스레드
while(Thread->m_bRcvThreadActive) {
if(Thread->m_TcpClient->Connected())
Thread->RcvProcess();
}
2. 데이터 받기
if(!m_bRcvThreadActive || !m_TcpClient->Connected()) return;
int rcvLen;
char RcvBuffer[BUFF_SIZE];
try {
memset(RcvBuffer, 0, sizeof(RcvBuffer));
rcvLen = m_TcpClient->ReadFromStack();
if(rcvLen > 0) {
// rcvLen = m_TcpClient->InputBuffer->Size;
m_TcpClient->ReadBuffer(RcvBuffer, rcvLen);
}
}
catch(Exception &e) {
// 연결이 종료된 뒤에도 위에서 기다리고 있어 에러가 나지만 이곳에서 처리하여 리턴 한다.
// rcvLen = m_TcpClient->ReadFromStack();
return;
}
if(rcvLen) {
}
// 종료
void __fastcall ServerDisConnect(void)
{
// Rcv 스레드 종료
m_bRcvThreadActive = FALSE;
if(m_TcpClient->Connected()) {
m_TcpClient->Disconnect();
m_SenderLog.WriteLogString("TCP 서버 연결 종료.");
}
}
'프로그래밍 > C++ Builder' 카테고리의 다른 글
리터, 금액 콤마 표시 (0) | 2019.07.16 |
---|---|
100일전 날짜 구하기 (0) | 2019.07.16 |
중복 실행 체크 (0) | 2019.07.16 |
로컬 IP 알아내기 (0) | 2019.07.16 |
버튼으로 팝업 메뉴 띄을때 좌표 표시 (0) | 2019.07.16 |
- Total
- Today
- Yesterday