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
[46295] Re:Re:Re:TServerSocket 에서요..
공부맨 [] 2055 읽음    2006-08-24 11:27
지금 확인해보니
TServerSocket->Socket 은 TServerWinSocket 입니다.
OnActive 와 OnClientRead 등의 이벤트에 넘어오는 Socket 포인터는 TCustomWinSocket 이구요.
한마디로 다른 클래스이죠.

ServerSocket1->Socket->Connections 은 TCustomWinSocket 이네요.
따라서
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
//1.    ServerSocket1->Socket->Connections[0]->ReceiveText();
//2.    Socket->ReceiveText();
}
//---------------------------------------------------------------------------
ServerSocket1 에 하나의 클라이언트만 접속해있다고 가정할때
위 1,2번 코드는 동일 하다고 봐도 될 듯....


p.s.  중요!!!
폼클래스내부에서 Close() 등의 메소드는 Form1->Close() 가 아니라 this->Close()입니다. 이거 확실히 알고 가셔야 나중에 문제가 없습니다. 클래스내부에서는 암묵적으로 this를 사용합니다. 그냥 Show(), Close(), Hide() 사용하셔도 this->Show(), this->Close(), this->Hide()로 실제 사용된다는걸 꼭 염두에 두세요.



흑태자 님이 쓰신 글 :
: 강재호.만해 님이 쓰신 글 :
: : 흑태자 님이 쓰신 글 :
: : : 여전히 빌더 예제 프로그램인 chat과 강좌에 있는 소켓 프로그래밍을 붙잡고 씨름을 하고 있습니다 ^^;;
: : :
: : : TServerSocket을 이용해서 서버를 운영하는 프로그램을 만들때 OnClientRead나 OnAccept 이벤트 등이 발생할때
: : : chat 예제 프로그램에서는 Socket->RemoteAddress 나 Socket->ReceiveText 등으로 사용을 하던데요
: : : 전 이게 폼을 닫을때 Form1->Close() 이것을 그냥 Close()라고 표현하는것과 같은 표현인줄 알았습니다
: : : 그래서 Socket->ReceiveText 이것도 ServerSocket1->Socket->ReceiveText 이것과 동일한 것인줄 알고 있었죠
: : :
: : : 그런데 저런 이벤트가 발생할때 파라메터로 넘어오는데에 TCustomWinSocket *Socket 이라는.. 이벤트가 발생한
: : : 소켓의 포인터가 넘어오더군요.
: : : 그렇다면 서버에 접속한 클라이언트가 여럿일 경우 이벤트가 발생했을때 어떤 클라이언트인지 알아볼수 있는 요소가
: : : Socket 이라는 것을 알았습니다.
: : : 그러면 ServerSocket1->Socket 에서 사용하는 이 Socket는 어떤 소켓입니까? 동일한게 아닌가요?
: : :
: : : 그리고 연장선에 있는 질문인데 ServerSocket1->Close() 하고 ServerSocket1->Socket->Close() 이것도 다른 의미겠죠?
: : : 어떻게 다른지 궁금합니다.
: :
: : 안녕하세요 만해입니다.
: :
: : ㅋㅋ
: :
: : 제가 기억 하는 바로는 TServerSocket은 하나의 시작 지점으로 클라이언트의 접속을 기다리는 대기점이고요
: :
: : TServerSocekt->Socekt은 클라이언트가 접속 했을때
: :
: : 서버에서 관리를 위해 각각 개별 클라이언트별 소켓을 생성 할당 하여 데이타 전송이나 그외 다른 작업을
: :
: : 수행합니다. 그러니깐 클라이언트와 직접적인 통신을 하는 소켓이죠
: :
: : 강좌란에 TServerSocket, TClientSocket 강좌가 있으니 참고 하세요~
: :
: : PS. 나중에 퇴근후에 보충해서 다시 올릴께요~
:
: 일단 무슨 얘기인지는 알겠습니다. 강좌란에 있는 그 강좌가.. 5개인가로 되어 있는 소켓강좌라면 이미 읽었구요..
: 그래서 클라이언트가 하나씩 접속할때마다 소켓을 하나씩 개별 생성한다는 것도 알겠습니다.
:
: 제가 궁금한걸 정확히 다시 말씀을 드려야 하는건지..
: TServerSocket->Socket->ReceiveText 하고 Socket->ReceiveText하고 뭐가 다른거죠?
:
: 소켓 관련 이벤트가 발생했을때는 파라메터로 인자가 넘어오기 때문에 Socket->ReceiveText 만으로 데이터를
: 읽어오는게 가능하다는걸 알겠는데..
: 만약에 이벤트 프로시져..흠.. 이벤트 처리 함수라고 해야하나.. 그 밖에서는 그냥 Socket->ReceiveText 만으로는
: 읽을수 없고 TServerSocket->Socket->ReceiveText 라고 해야하는거 아니냐..이겁니다.
: 그렇다면 여러개의 클라이언트가 붙어있을때 과연 어떤 소켓에 데이터가 들어와 있는지 알고 그 데이터를 읽어오죠?
:
: 강좌에 보면 TServerSocket->Socket->Connections[i]->SendText("Hello"); 요런게 있더군요
: 이거라면 접속되어 있는 클라이언트를 구분해서 데이터를 보내기도 한다는 건데..
: 읽을때도 그럼 TServerSocket->Socket->Connections[i]->ReceiveText("Hello"); 이렇게도 되네요. 보니까..-_-;;
:
: 그런데 또??
: TServerSocket->Socket->Connections[i]->ReceiveText(" "); //요런건 되는데
: 앞에 TServerSocket 을 뺀 상태에서는 Socket->Connections 이 명령이 듣질 않네요?
:
: 그림 위에 다시 질문한건 다 제쳐두고.. 뭐 어차피 비슷한 질문이기는 하지만..
:
: 이벤트가 발생한 상태에서
: TServerSocket->Socket과 Socket 의 차이점은 무엇인가요?

+ -

관련 글 리스트
46258 TServerSocket 에서요.. 흑태자 1158 2006/08/22
46279     Re:TServerSocket 에서요.. 강재호.만해 1200 2006/08/23
46280         Re:Re:TServerSocket 에서요.. 흑태자 1086 2006/08/23
46295             Re:Re:Re:TServerSocket 에서요.. 공부맨 2055 2006/08/24
46296                 감사합니다 ^^ 흑태자 929 2006/08/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.