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
[68178] Re:IdTCPClient사용하는데 자꾸 죽는 문제가 발생합니다ㅠㅠ 조언 부탁드립니다.
kylix [] 3379 읽음    2012-09-17 11:16
Form1->serverSend(data);
위와 같은 코드가 문제가 될 가능성이 클것같은데요...

Indy의 TIdTCPClient의 Execute이벤트는 쓰레드내에서 돌기 때문에 메인쓰레드의 자원은 안건드는것이 좋죠...

박지민 님이 쓰신 글 :
: 클라이언트 사용부분에 문제가있나요? 클라이언트 문제인지 서버문제인지;
:
: 먹통이되는 문제가 발생하는데 원인을 못찾겠네요ㅠ 클라이언트는 디스커넥트 이벤트도 발생을 안하고
:
: 타임아웃같은것도 사용안함으로 잘되있는거같은데...
:
: 많은 패킷이 중계되는 서버와 클라이언트 입니다.
:
: 조언좀 부탁드립니다ㅠ
:
: 클라이언트 설정은
: ReuseSocket = rsFalse
:     UseNagle = False
:     TerminateWaitTime = 0
:
: 서버 설정은
: ConnectTimeout = 0
:     IPVersion = Id_IPv4
:     Port = 0
:     ReadTimeout = -1
:     ReuseSocket = rsFalse
:     UseNagle = False
:
:
:
: //클라이언트 쓰레드 Execute 처리부분
: void __fastcall tcpClient::Execute()
: {
: 	while(Form1->IdTCPClient1->IOHandler->Connected()){
: 		try{
: 			int RecieveSize = Form1->IdTCPClient1->IOHandler->InputBuffer->Size;
: 
: 			if(RecieveSize > 0){
: 				TIdBytes data;
: 				Form1->IdTCPClient1->IOHandler->ReadBytes(data, RecieveSize, false);
: 				Form1->serverSend(data);
: 			}else{
: 				Sleep(20);
: 			}
: 		}catch(...){
: 			Form1->clientClose();
: 		}
: 	}
: 	Form1->clientClose();
: 	//---- Place thread code here ----
: }
: 
: //서버 Execute 이벤트 처리부분
: try{
: 
: 	    if(AContext->Connection->IOHandler->Connected()){
: 		int RecieveSize = AContext->Connection->IOHandler->InputBuffer->Size;
: 
: 		if(RecieveSize > 0){
: 			TIdBytes array;
: 			AContext->Connection->IOHandler->ReadBytes(array, RecieveSize, false);
: 
: 			for(int i = PacketIdx; i < RecieveSize; i++){
: 				PacketD[i] = array[i];
: 			}
: 			PacketIdx += RecieveSize;
: 			while (true) {
: 				int length = PacketD[0] & 0xFF;
: 				length |= PacketD[1] << 8 & 0xFF00;
: 				if ((length == 0) || (length > PacketIdx)) break;
: 
: 				TIdBytes temp;
: 				temp.set_length(length);
: 
: 				for(int i = 0; i < length; i++){
: 					temp[i] = PacketD[i];
: 				}
: 				PacketIdx -= length;
: 				for(int i = 0; i < PacketIdx; i++){
: 					PacketD[i] = PacketD[(length + i)];
: 				}
: 
: 				clientSend(temp);
: 
: 			}
: 		}else{
: 			Sleep(20);
: 		}
: 	}else{
: 		Sleep(20);
: 	}
: 
: 
:     }catch(...){
: }
: 
: 

+ -

관련 글 리스트
68175 IdTCPClient사용하는데 자꾸 죽는 문제가 발생합니다ㅠㅠ 조언 부탁드립니다. 박지민 1901 2012/09/17
68178     Re:IdTCPClient사용하는데 자꾸 죽는 문제가 발생합니다ㅠㅠ 조언 부탁드립니다. kylix 3379 2012/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.