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
[51001] Re:인디10 채팅서버에서 접속 해제 문제..
아루스 [tinydew4] 2427 읽음    2007-10-23 15:02
코드가 메세지 처리 부분만 있어서 모르겠네요.
비슷한게 있어서 첨부파일로 올릴게요.
Indy 소켓 예제를 참고하였습니다. (같은 내용이 있더군요)
서버와 클라이언트를 하나로 합쳐논거고,

개인 작업시에 Synergy, 원격데스크탑 등을 오가며 클립보드 공유가 가끔 안되서
개인용도의 텍스트 공유용으로 만든거라 매끄럽지 않은 동작도 있고 예외처리 안했는데
기능은 동작하니 참고하셔요~
서버는 포트 설정해 열고
클라이언트는 IP/Port 설정해서 접속하며 각각 타이핑하는 문자열이 서버와 접속된 클라이언트 모두에게 뿌려집니다.



DoyongID 님이 쓰신 글 :
: 채팅서버에 클라이언트 2대를 물려서 메시지를 주고받고 있습니다..
:
: A클라이언트가 메시지 보내면 서버에서 받아서, A,B에게 전송하고,
: B클라이언트가 메시지에 보내면 역시 서버에서 A,B에게 다시 전송하는 방식인데요..
:
: 각 클라이언트가 1ms마다 메시지를 보냅니다..
:
: 그런데, 이 과정에서 A클라이언트의 접속을 해제하면 B클라이언트 접속도 해제되거든요.. 어디가 문제인지 모르겠습니다. 동기화 문제인가 싶어서 크리티컬섹션도 먹였는데, 마찬가지고..
:
: void __fastcall TWin_Main::TCPServerExecute(TIdContext *AContext)
: {
:     TByteDynArray    Buffer;
:     PACKET_RECVCHAT    stRecvPacket;
:     PACKET_SENDCHAT    stSendPacket;
:     BYTE            Cmd;
:
:     TIdContext         *lpContext;
:
:     EnterCriticalSection(&Cs);
:
:     Cmd    = AContext->Connection->IOHandler->ReadChar();
:
:     switch(Cmd)
:     {
:     case CMD_CHAT:
:         AContext->Connection->IOHandler->ReadBytes(Buffer, sizeof(PACKET_RECVCHAT), false);
:         BytesToRaw(Buffer, &stRecvPacket, sizeof(PACKET_RECVCHAT));
:
:         ListBox_Info->ItemIndex    = ListBox_Info->Items->Count - 1;
:
:         stSendPacket.Cmd    = CMD_CHAT;
:         strcpy(stSendPacket.Str, stRecvPacket.Str);
:
:         Buffer     = RawToBytes(&stSendPacket, sizeof(PACKET_SENDCHAT));
:
:         TList *LockList = TCPServer->Contexts->LockList();
:
:         try
:         {
:             for(int i = 0; i < LockList->Count; i++)
:             {
:                 lpContext = (TIdContext *)(LockList->Items[i]);           // get client-object
:
:                 if(lpContext->Connection->IOHandler->Connected())
:                     lpContext->Connection->IOHandler->Write(Buffer);
:             }
:         }
:         __finally
:         {
:             TCPServer->Contexts->UnlockList();
:             LeaveCriticalSection(&Cs);
:         }
:     }
: }

+ -

관련 글 리스트
51000 인디10 채팅서버에서 접속 해제 문제.. DoyongID 1522 2007/10/23
51002     Re:인디10 채팅서버에서 접속 해제 문제.. DoyongID 1977 2007/10/23
51001     Re:인디10 채팅서버에서 접속 해제 문제.. 아루스 2427 2007/10/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.