티스토리 뷰

반응형

// 서버 연결

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