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
[66582] Re:indy 10 Server 에서 접속 해지시 해당 쓰레드(Execute) 죽이는 방법?
박우성 [solgari] 2845 읽음    2012-03-12 14:07
질문 1 > 접속하게 되면 해당 소켓 접속 id(?) 를 TList와 같은 곳에 저장해놔야 하나요?

필요하시면 별도로 정보를 저장할 수도 있겠지만, 필요없는데 할 필요는 없습니다.
Indy 서버는 쓰레드 형태로 구동되므로, TList 보다는 TThreadList에 저장하는 것이 좋습니다.

보통, 클라이언트별 정보 관리가 필요하다면 TIdContext의 Data에 저장하면 됩니다.

class TUserData : TObject
{
  //필요한 데이타 선언
};

AContext->Data = new TUserData();

이렇게 저장된 데이타는 Disconnection 부분에서 반드시 메모리 해제를 해야 합니다.

if( AContext->Data ){
   delete AContext->Data;
   AContext->Data = NULL;
}


질문 2 > 서버에서 해당 클라이언트의 접속을 끊게 하는 방법은 어떻게 되나요?

클라이언트가 연결을 끊으면 서버에도 자동으로 연결이 해제 됩니다. 별도로 해 줄 필요는 없지만
서버에서 특정 조건에서 강제로 연결을 끊어야 한다면, 다음과 같이 하면 됩니다.

void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
{
	while( AContext->Connection->Connected() ){

		..........

		if( 조건 ) AContext->Connection->Disconnect();
	}

}


도라지 님이 쓰신 글 :
: 안녕하세요.
: 오래간만에 질문 올리네요^^;;
:
: 다름이 아니라 이번에 indy 10을 공부하면서..
:
: 아래와 같이 간단하게 소스를 구성하였습니다.
:
: 질문 1 > 접속하게 되면 해당 소켓 접속 id(?) 를 TList와 같은 곳에 저장해놔야 하나요?
: 질문 2 > 서버에서 해당 클라이언트의 접속을 끊게 하는 방법은 어떻게 되나요?
:
:
:
:
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::IdTCPServer1Connect(TIdContext *AContext)
: {
: 	ShowMessage("client connect");
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::IdTCPServer1Disconnect(TIdContext *AContext)
: {
: 	ShowMessage("cliient disconnect");
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
: {
: 	int i = 0;
: 	while(1)
: 	{
: 		AnsiString a;
: 		a.sprintf("cnt : %d", i++);
: 		Memo1->Lines->Add(a);
: 		Sleep(10);
: 	}
: }
: //---------------------------------------------------------------------------
: 

:
:
: Disconnection() 함수내부에서
: 연결이 끊어진 소켓ID에 대하여 취소하도록 해주면 될듯 한데 -_-;
: 감이 안오네요^^;;
:
: 답변 부탁드려요^^;; 감사합니다~~~

+ -

관련 글 리스트
66571 indy 10 Server 에서 접속 해지시 해당 쓰레드(Execute) 죽이는 방법? 도라지 1353 2012/03/10
66582     Re:indy 10 Server 에서 접속 해지시 해당 쓰레드(Execute) 죽이는 방법? 박우성 2845 2012/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.