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
[51474] Re:[질문] TClientSocket, TServerSocket 통신 하기
장성호 [nasilso] 4628 읽음    2007-12-05 02:25
좀 어렵게 하시네요

TClientSocket  , TServerSocket은?
타입이 Blocking 모드 보다 NonBlocking  모드가 코딩이 간편하고
더 잘맞는것 같습니다.
대개 TClientSocket  , TServerSocket 은 NonBlocking 모드로 대게 쓰구요..

...

간단하게..
둘다 NonBlocking  으로 설정하시구요

서버는  OnClientRead이벤트 함수에서
ServerSocket1ClientRead    읽으시면 되구요

클라이언트는 OnRead이벤트에서 읽으시면 됩니다. ClientSocket1Read


void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
    String str=Socket->ReceiveText();
    Memo1->Lines->Add(str);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
    String str=Socket->ReceiveText();
    Memo1->Lines->Add(str);
}
//---------------------------------------------------------------------------


그럼..


mister 님이 쓰신 글 :
: 제가  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 1914 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.