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
[44311] TClientSocket을 쓰고 있는데요..
skjoon [skjoon] 1152 읽음    2006-03-29 15:08
빌더의 컴포넌트를 이용해서 서버와 클라이언트 프로그램을 만들었습니다.
서버는 통신서버와 DB서버로 나뉘고
통신서버는 하위단의 장비와 시리얼로 연결되어 데이터를 수집하고
DB서버는 통신서버에 접속해서 수집된 데이터를 요청합니다. 받은 데이터를 DB에 저장도 하구요..

통신방식은 타이머를 하나 쓰고 그 안에서 요청모드일 경우에는 통신서버로 전송을 하고, 바로 수신모드로 바꿔서 계속 Receive하고 .. 데이터를 수신하면 또 요청모드로 바꿔서 전송하고.. 입니다. 타이머의 인터벌은 1밀리이구요..
수신되는 데이터의 양이 좀 많습니다. 한번에 1Kbyte정도 되니까요..

먼저는 Receive 이벤트에서 바로 전송을 했었는데 이 문제때문에 혹시나 해서 타이머 방식으로 바꾼겁니다.

문제는 DB서버가 하루에 한 두번 정도 통신을 안하는 것입니다.
정확하게 말씀드리면 통신서버로부터 데이터를 수신하고 바로 요청을 또 해야 하는데 요청을 안합니다.
통신서버는 접속된 DB서버가 일정시간동안(5초) 요청이 없으면 시스템이 다운된걸로 판단하고 소켓을 끊습니다.
DB서버는 위처럼 통신서버로 요청을 안하고 있다가 소켓이 끊기면 Disconnect 이벤트를 받으면 소켓을 다시 연결하고 통신을 시작합니다.

그래서 타이머를 하나 둬서 전송을 제대로 하는지 감시하는 기능을 추가했는데.. 위와 같이 멈추는 현상이 발생하면 타이머 이벤트도 발생하지 않습니다. 통신 끊김 이벤트가 생기면 그 때 타이머도 다시 동작하구요.. -.-;;

또 이번에는 스레드를 만들고 소켓핸들을 넘겨서 통신하는 부분을 그 안에서 돌려도 마찬가지 결과입니다.

그런데 재미있는 것은 우연인지 몰라도 그 현상이 발생되는 시간이 XX시 58분 에서 XX시 00분 사이에 일어난다는 겁니다. 매시간 일어나는 건 아니지만 말입니다.

참고로 윈도우2003 환경입니다.

장황하게 쓰긴 했는데 잘 전달이 될지 모르겠습니다. ^^;; 혹시 비슷한 경험 있으신 분들 도움 부탁드립니다.

+ -

관련 글 리스트
44311 TClientSocket을 쓰고 있는데요.. skjoon 1152 2006/03/29
44327     Re:TClientSocket을 쓰고 있는데요.. 정재만 1085 2006/03/30
44318     Re:TClientSocket을 쓰고 있는데요.. Mir 1008 2006/03/30
44326         Re:Re:TClientSocket을 쓰고 있는데요.. skjoon 1356 2006/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.