|
강재호.만해 님이 쓰신 글 :
: 흑태자 님이 쓰신 글 :
: : 여전히 빌더 예제 프로그램인 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 의 차이점은 무엇인가요?
|