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
[9855] Re:[질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다
Moony [] 1056 읽음    2001-08-13 19:38
안녕하세요... Moony입니다...

우선 수야님의 말씀대로 일단 채팅중에 새로 접속하는 다른 클라이언트에게 일대일 대화중이니까

대기해라는 메시지를 보내거나 그런 처리를 하기 위해서는 당연히 소켓 connection이 유지되어

있는 중에 메시지를 보내야 겠죠...

즉, 채팅중에 새로 접속하는 이벤트가 일어날때 다시말해 TServerSocket의 Connect이벤트 핸들러에

우선 새로 접속한 클라이언트에게 메시지를 날려주는 코드를 작성합니다...

ServerSocket1->Socket->Connections[1]->SendText("기둘려~~!!");

물론 메시지는 원하시는 대로 만드시면 되겠지요... 반드시 문자열일 필요는 없다는 뜻입니다...

여기 위 코드에 대해 간단히 설명드리면

TServerSocket의 프로퍼티를 보면 Socket이라는 TServerWinSocket의 포인터형으로 선언된 놈이

있는데 다시 TServerWinSocket 클래스의 프로퍼티중에는 Connections라는 TCustomWinSocket *형의

배열이 있습니다...

이놈이 바로 현재 서버 소켓에 접속되어있는 클라이언트의 소켓포인터들을 정리해 가지고 있죠...

그래서 Connections[0]가 가장 처음에 접속한 클라이언트의 소켓포인터를 가르키고 Connections[1]이

그 다음에 접속한 클라이언트의 소켓포인터를 저장하게 됩니다...

그러므로 현재 접속한 클라이언트가 있는 상태에서 새로운 클라이언트가 접속하게 되면

Connections[1]에 소켓 포인터가 저장되니까 이걸 이용해 메시지를 날리고 다음과 같이 소켓종료를

시켜주시면 되겠죠...

ServerSocket->Socket->Connections[1]->Close();

물론 이 Connections배열은 여러 클라이언트가 접속되어있을때 종료된 소켓이 있으면 자동으로 정리를

해서 항상 클라이언트의 수만큼 인덱스를 유지하게 됩니다...

이말은 예를 들어, 0번부터 9번까지 총 10개의 클라이언트가 붙어있을때 만약 5번인덱스의 소켓이

종료되면 자동으로 0번 부터 8번까지의 인덱스로 정리가 된다는 뜻입니다...

이 Connections프로퍼티를 이용하면 접속되어있는 모든 클라이언트에게 브로드캐스팅하기도 매우 쉽겠죠...

그리고 수야님이 말씀하신 N:N은 아니구요... TServerSocket 컴포넌트가 사실 1:N의 기능은 하지만

내부적으로는 반드시 쓰레드를 생성시키는 것은 아니고 클라이언트 접속때 새로운 소켓 객체를

생성시켜 1:1통신을 하게 되고 그런 여러개의 소켓 객체를 편리하게 관리하고 사용할 수 있는 여러가지

프로퍼티와 메소드를 제공하는 것이죠...

그럼 참고 하시길...



홍지곤 님이 쓰신 글 :
:  안녕하세요~ Magic.홍지곤 입니다.
:
:  알면 알수록 여쭤 볼께 늘어나는 군요...
:
:  쉽게 말하면요, 1:1 텍스트 체팅시, 체팅 중이라면
:  다른 클라이언트가 접속했을 시 일대일 체팅중이니까,
:  대기해~~라고 할 수 있는 방법은 없는지요?
:  아님 다른 클라이언트는 없애 버릴 방법은여~~
:
:  알고 계신분 답변 좀 부탁드립니다.
:  간단하게 소스 올려주시면 더욱 감사드립니다.
:
:  그럼. 즐프하세요~~
:

+ -

관련 글 리스트
9836 [질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다~~ 홍지곤 796 2001/08/13
9855     Re:[질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다 Moony 1056 2001/08/13
9857         [질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다~~ 홍지곤 762 2001/08/13
9852     Re:[질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다 수야 851 2001/08/13
9838     Re:[질문]소켓에서 Server/Client가 Connet 되어있을시 다른 Client 접속 안되게 하는 방법좀 부탁드립니다 이경문 862 2001/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.