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
[4583] Re:[Q]Server소켓에서 클라이언트 소켓의 접속번호 알기??
박지훈.임프 [cbuilder] 3429 읽음    2000-12-11 00:00
이호경 님이 쓰신 글 :
: 안녕하세요.
: 또 귀찮게 해드리네요.
:
: 서버 소켓 접속시에 발생하는 에러는 잘 잡아내었는데.. 다른 골치거리가 생겼습니다.
: 가령 서버에 여러대의 클라이언트가 접속되었을 때의 경우에 서버에서 원하는 클라이언트로 메시지를 보낼때에는
:
: ServerSocket1->Socket->Connections[client_number]->SendText(str);
:
: 식으로 보내게 되는데, 클라이언트가 순서대로 접속되어 접속이 끊어지지 않고 계속 유지되면 별 문제가 없을 것이나, 여러가지 이유로 접속이 끊길 경우에는 좀 골치아픈 문제가 생기더군요.
:
: 제가 테스트를 해본 결과 상기 client_number은 0부터 1씩 증가하면서 서버에 접속된 시간순서대로 번호가 할당이 되며, 중간에 한 클라이언트의 접속이 끊어지면 이 클라이언트 이후에 접속된 클라이언트의 client_number는 순서대로 1씩 감소하게 된다는 사실을 알게되었습니다.
: 물론 클라이언트가 서버소켓에 접속되면 순서대로 client_number를 할당하여 리스트로 보관하였다가 소켓접속이 끊어지면 이후에 접속된 클라이언트의 client_number를 1씩 줄여주면 되지만 왠지 넘 무식한 방법이 아닌가 싶어서 이렇게 여쭤봅니다.
: 현 클라이언트에 할당된 client_number를 알아낼 다른 방법이 없는지요???


임펠리테리입니다.

서버소켓에 연결된 클라이언트소켓연결의 핸들을 통해 데이터를 보내려고 하시는지요? 저는 소켓쪽은 전문이 아니라서 장담은 못하겠지만, 아무래도 Connections[]나 ActiveConnections[] 배열의 인덱스를 기억해서 그 인덱스를 이용해서 클라이언트연결을 찾아내는 것은 좀 무리가 있겠구요, Handle 프로퍼티에 저장된 윈속핸들을 읽어서 Connections[] 배열에서 for 루프로 검색해서 찾아내는 것이 가장 확실할 거 같네요. client_number라고 말씀하신 인덱스란 것이 원래 윈속에서 의미가 있는 값이 아니니까 이 값을 믿고 코딩하는 것은 좀 위험할 거 같습니다.

그럼 참고하시길...

+ -

관련 글 리스트
4567 [Q]Server소켓에서 클라이언트 소켓의 접속번호 알기?? 이호경 3163 2000/12/09
4585     Re:[Q]Server소켓에서 클라이언트 소켓의 접속번호 알기?? 경호 3164 2000/12/12
4583     Re:[Q]Server소켓에서 클라이언트 소켓의 접속번호 알기?? 박지훈.임프 3429 2000/12/11
4604         Re:Re:두분 친절한 답변에 감사드립니다. 이호경 3085 2000/12/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.