C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[11799] IdTcpServer 에서... ㅠ.ㅠ
허접빌더 [] 1317 읽음    2001-10-16 10:36
안녕하세요..
Indy 8 을 사용해서 메신저 성격의 프로그램을 만들고 있습니다...
IdTcpServer 에서 메시지를 받아서 메시지가 있으면 새로운 창을 띄워서 그 창에 메시지 내용을
출력하는 루틴입니다...

문제는 IdTcpServer 에서는 메시지 전달까지는 잘 되는데 출력창을 하나 띄우게 되면 출력창이 정상적으로
띄워지지가 않고 뜨다가 멈춘 상태에서 프로그램이 죽어버립니다..

IdUdpServer 를 사용해서 Udp 통신을 하게 되면 정상적으로 잘 동작이 됩니다..
꼭 Tcp 통신을 하게 되면 이런 현상이 발생하는 군요... ㅠ.ㅠ

아래에 TcpServer 에서 받아 처리하는 부분을 올려보겠습니다..

void __fastcall TIdSocket::IdTcpServerExecute(TIdPeerThread *AThread)
{
    BASEMSG         *pMsg = new BASEMSG;
//    AnsiString      asMsg;

    try
    {
//        asMsg = AThread->Connection->ReadLn( "", 5000 );
        AThread->Connection->ReadBuffer( (BASEMSG*)pMsg, sizeof( BASEMSG ) );
    }
    catch( ... )
    {
    }

    if( strlen( pMsg->Msg ) > 0 )
    {
        switch( pMsg->TypeInfo )
        {
            case        MESSAGE_INCOMMING :
                Process_Message( AThread, pMsg );
                break;
        }
    }

    delete pMsg;
/*
    if( asMsg.Length() > 0 )
        Process_Message( AThread, asMsg );
*/
}
//---------------------------------------------------------------------------
void __fastcall TIdSocket::Process_Message( TIdPeerThread* AThread, BASEMSG* pMsg )
//void __fastcall TIdSocket::Process_Message( TIdPeerThread* AThread, AnsiString asMsg )
{
    int         i = 0;
    bool        isPrint = false;

    for( i = 0; i < ((TfrmMainForm*)Owner)->m_lstChatWindows->Count; i++ )
    {
        TfrmChat* pChat = (TfrmChat*)(((TfrmMainForm*)Owner)->m_lstChatWindows->Items[i]);
//        if( pChat->m_asPeerIP == AThread->Connection->Binding->PeerIP );
        if( pChat->m_asPeerIP == AThread->Connection->Binding->PeerIP )
        {
            pChat->AddData( pMsg->Msg );
            isPrint = true;
            break;
        }
    }

    if( !isPrint )
    {
        TfrmChat *ChatWindow = new TfrmChat( this->Owner );
        ChatWindow->m_asUserID.sprintf( "%s", pMsg->UserID );
        ChatWindow->m_asPeerIP = AThread->Connection->Binding->PeerIP;

//        ChatWindow->AddData( asMsg );
        ChatWindow->AddData( pMsg->Msg );
        ((TfrmMainForm*)Owner)->m_lstChatWindows->Add( ChatWindow );
        ChatWindow->Show();
//        SetForegroundWindow( ChatWindow->Handle );
    }
}

여기 위에서 ChatWindow->Show() 를 하게 되면 ChatWindow 가 뜨다가 다 뜨지 않고 멈춰버립니다..
이유가 뭔지 정말 궁금합니다.. 예전에도 이런 경험이 있었는데 꼭 IndyTcpServer 로 작업을 하면 이런
현상이 발생하더군요.. 해결방법이 있으면 한수 지도 바랍니다... 감사합니다.

+ -

관련 글 리스트
11799 IdTcpServer 에서... ㅠ.ㅠ 허접빌더 1317 2001/10/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.