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
[71359] 자답:소켓 패킷 crc값이 춤을 춥니다..
locke [syiware] 3281 읽음    2014-05-26 09:33
참 믿기힘든 일이네요. crc값을 함수로부터 리턴값으로 받으니 정상처리 되네요. ㅠㅠ

(기존에는 파라미터로 참조형이나 포인터로 넘겨서 리턴값을 out 파라미터로 처리했거든요)

이걸 어떻게 이해해야 할지.. 아무튼 해결되었습니다.

-locke

locke 님이 쓰신 글 :
: 안녕하세요. 요새 소켓서버 프로그램을 xe5에서 indy IdTCPServer 컴포넌트로 개발중입니다.
:
: 클라이언트와 패킷을 주고받는데 클라이언트가 패킷을 줄 때는 패킷 끝에 2바이트의 crc값이 있거든요.
:
: 이걸 서버단의 crc구하는 루틴으로 crc값을 구해서 맞으면 정상적인 패킷처리를 하고 아니면 오류로 로그에 남깁니다.
:
: 동접이 550명 까지는 아무 문제가 없습니다. 근데 600 이상이 되면 20 패킷중 8개는 crc가 다르게 나옵니다.
:
: 1천명이 신호를 주고받을때 수동으로 서버 창에다가 데이터 패킷 만들어서 crc값 호출해보면
:
: 어떤 놈은 매번 호출해도 같은 값이 나오고 어떤 놈은 값이 자주 바뀌네요.
:
: 물론 동접이 0명일 경우는 고정값으로 매번 호출해도 불변입니다.
:
: 이걸 비교해서 처리하는 루틴은 OnExecute() e/h에 있고 여기서 crc값 구해서 리턴해주는 함수 하나 호출하거든요.
:
: 그 함수는 자동변수 몇개 스택에 잡아놓고 crc값을 구하기 위해 매핑된 전역 unsigned short형 배열 256개를 참조합니다.
:
: 물론 거기선 각 패킷의 문자값을 루프 돌려서 비트연산을 하고 매핑된 배열에서 가져온 값으로 xor 연산도 합니다.
:
: OnExecute는 Indy가 접속한 클라이언트별로 쓰레드 만들어서 루핑돌다가 호출하는 call back 함수잖아요?
:
: 혹시나 동접하는 애들이 서로 충돌하는게 아닌가 해서 CriticalSection을 써봐도.. 증상은 동일하네요.
:
: crc 함수를 호출해도 각 개별스택에 자동변수들 들어가니까 중복되어 충돌날 부분도 안보이는데
:
: 왜 이러한 현상이 생기는걸까요? 이렇게 많은 동접을 처리해본 경험이 없네요.
:
: 혹시 이런 경험 있으신 분은 주저마시고 뭐든 도움될 만한 힌트를 주세요.
:
: 부탁드립니다.
:
: -locke
:

+ -

관련 글 리스트
71356 소켓 패킷 crc값이 춤을 춥니다.. locke 3361 2014/05/23
71359     자답:소켓 패킷 crc값이 춤을 춥니다.. locke 3281 2014/05/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.