|
이호경 님이 쓰신 글 :
: 안녕하세요.
: 또 귀찮게 해드리네요.
:
: 서버 소켓 접속시에 발생하는 에러는 잘 잡아내었는데.. 다른 골치거리가 생겼습니다.
: 가령 서버에 여러대의 클라이언트가 접속되었을 때의 경우에 서버에서 원하는 클라이언트로 메시지를 보낼때에는
:
: 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라고 말씀하신 인덱스란 것이 원래 윈속에서 의미가 있는 값이 아니니까 이 값을 믿고 코딩하는 것은 좀 위험할 거 같습니다.
그럼 참고하시길...
|