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
[68175] IdTCPClient사용하는데 자꾸 죽는 문제가 발생합니다ㅠㅠ 조언 부탁드립니다.
박지민 [m1293] 1901 읽음    2012-09-17 01:50
클라이언트 사용부분에 문제가있나요? 클라이언트 문제인지 서버문제인지;

먹통이되는 문제가 발생하는데 원인을 못찾겠네요ㅠ 클라이언트는 디스커넥트 이벤트도 발생을 안하고

타임아웃같은것도 사용안함으로 잘되있는거같은데...

많은 패킷이 중계되는 서버와 클라이언트 입니다.

조언좀 부탁드립니다ㅠ

클라이언트 설정은
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 3380 2012/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.