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
[51464] [질문] TClientSocket, TServerSocket 통신 하기
mister [vsado] 1913 읽음    2007-12-04 17:49
제가  BCB4로 처음 시도를 해 보는데요..
client와 sever 간에 처음 접속은 되더군요..
OnAccept, OnConnect  이벤트는 서버쪽에서 알아 듣습니다. 하지만  OnGetThread는 전혀 알아 듣지 못하네요..
그리고 client쪽에서 ClientSocket->SenText("~~~~")를 해주면 Server쪽에선 OnGetSocket 쪽에서 처리를 해 줘야
하나요.. help에서는 소켓 쓰레드와  스트림을 쓰던데 그 방법대로 해도 OnGetThread가 안되고요..
클라이언트에서 값을 pStream->Write(~~~)하면 몇번을 쓰고 멈춰 버리더군요..


강좌나 질답을 검색해도, 제가 처음이라 안되네요.. 소스를 올려보겠습니다.
잘못된 부분이나 추가 해야 할 사항이 있으면 알려주세요..
간단하게 문자를 주고 받는 정도만 이해 하면 됩니다.



//-------------------- 클라이언트 쪽 -------------------------------

//접속 버튼 입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (ClientSocket1->Active)
    {
        ClientSocket1->Active = false;
        Sleep(1000);
    }



    try
    {
        ClientSocket1->ClientType = ctBlocking;
        ClientSocket1->Host = "192.168.10.125";
        ClientSocket1->Port = 8080;
        ClientSocket1->Active = true;
        ShowMessage("  ++  Server 에 접속합니다.  ++  ");
    }
    catch ( ... )
    {
        ShowMessage("  ++  Server 접속에 실패 했습니다, 서버를 실행해 주세요 !  ++  ");
    }
}

//OnConnect 이벤트
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    cliSocket = Socket;
    Memo1->Lines->Append("Client Connect to Server");

}
//

//메시지를 보내는 부분입니다.
void __fastcall TForm1::SendSocket()
{
    char sendBuffer[BUFFERSIZE];
    char buffer[BUFFERSIZE];
    bool bCompleted = false;
    memset(sendBuffer, '\0', BUFFERSIZE);

    while (!bCompleted && cliSocket->Connected)
    {
        try
        {
            TWinSocketStream* pStream = new TWinSocketStream(cliSocket, CLIENTWAITTIME);

            try
            {
               //서버로 보내고
                memset(buffer, '\0', BUFFERSIZE);
                memset(sendBuffer, '\0', BUFFERSIZE);
                Form1->Memo1->Lines->Append("Send to Serever");
                strcpy(sendBuffer,  "Client Message!");
                pStream->Write(sendBuffer, strlen(sendBuffer));
           
               //받으려 합니다.
                if (pStream->WaitForData(CLIENTWAITTIME))
                {
                    Form1->Memo1->Lines->Append("receive data");
                    if (pStream->Read(buffer, BUFFERSIZE) == 0)
                        cliSocket->Close();
                    else
                    {
                        Form1->Memo2->Lines->Append(AnsiString(buffer));
                        Form1->Memo2->Lines->Append("receive Message");

                        bCompleted = true;
                        //code here
                    }
                }
                else
                {
                    Form1->Memo1->Lines->Append("wait fail");
                    cliSocket->Close();
                }
            }
            __finally
            {
                delete pStream;
            }
        }
        catch (...)
        {
            Memo1->Lines->Append("Fail Stream");
        }
    }

    if(cliSocket->Connected)
    {
        cliSocket->Close();
    }


}

//------------------------------- 서버 쪽---------------------------------------

//Thread
void __fastcall TForm1::ServerSocket1GetThread(TObject *Sender,
      TServerClientWinSocket *ClientSocket,
      TServerClientThread *&SocketThread)
{
    SocketThread = new TMyServerThread(false, ClientSocket);
}
//


//처리 부분



void __fastcall TMyServerThread::ClientExecute(void)
{
    char sendBuffer[BUFFERSIZE];
    char buffer[BUFFERSIZE];

    while (!Terminated && ClientSocket->Connected)
    {
        Form1->Memo2->Lines->Append("recieve message");

        try
        {
            TWinSocketStream* pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);

            try
            {
                memset(sendBuffer, '\0', BUFFERSIZE);
                memset(buffer, '\0', BUFFERSIZE));

                if (pStream->WaitForData(CLIENTWAITTIME))
                {
                    Form1->Memo1->Lines->Append("receive data");
                    if (pStream->Read(buffer, BUFFERSIZE) == 0)
                        ClientSocket->Close();
                    else
                    {
                        Form1->Memo2->Lines->Append(AnsiString(buffer));
                        Form1->Memo1->Lines->Append("Send to Client");
                        strcpy(sendBuffer, "receive ok");
                        pStream->Write(sendBuffer, strlen(sendBuffer));
                        memset(buffer, '\0', BUFFERSIZE);

                        //code here
                    }
                }
                else
                {
                    Form1->Memo1->Lines->Append("wait fail");
                    ClientSocket->Close();
                }
            }
            __finally
            {
                delete pStream;
            }
        }
        catch (...)
        {
            HandleException();
        }
       
    }
}

+ -

관련 글 리스트
51464 [질문] TClientSocket, TServerSocket 통신 하기 mister 1913 2007/12/04
51474     Re:[질문] TClientSocket, TServerSocket 통신 하기 장성호 4628 2007/12/05
51479         Re:Re:[질문] TClientSocket, TServerSocket 통신 하기 mister 2470 2007/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.