ServerSocket1.Socket.connection[index]이라는 방법을 사용하지 않고 특정 클라이언트에 보내는 방법이 있을거 같은데요? 방법을 알고 있는 고수님 께서는 방법을 갈쳐주시면 고맙겠습니다. 아무리 생각해도 connection[index]으로 보내는 건 아주! 아주! 아주! 안좋은 방법인거 같은데
왜냐하면 클라이언트에서 접속이 끊겼을때 서버측에서 ServerClientDisconnect가 발생이 돼지 않는 경우가 아주 드물지만 있다고들 하더군요 또한 접속자수가 200명을 정도 돼는 채팅서버에서 일일이 index의 값을 찾기위해 for문등으로 돌릴경우 서버에 부하가 많이 걸릴거 같거든요
제가 알기로는 클라이언트가 물리적으로 접속이 끊겼을 경우 서버측에서는 클라이언트의 핸들값을 알아올수 있으며 이것을 이용해 바로 connection[index]따위를 읽어들이지 않고 바로 Close명령하나만으로도 연결을 끊을 수 있습니다. 글구 요청을 한 클라이언트에게 바로 ECHO시키기 위해서는 connection[index]를 사용하지 않고 Socket.SendText('사바사바'); 로 간단히 구현이 되는걸 보면 특정 클라이언트에게는 connections[i]의 방법말고 다른 명령을 이용해서 간단히 보내는 방법이 있을거 같은데...
서버측에서 LocalHost, LocalAddress, LocalPort, RemoteHost, RemoteAddress, RemotePort 중 하나를 잘 사용하면 가능하지 않을까 하는 재 갠 생각입니다.
만약 알고계신분이 계시면 주저하시지 마시고 빠른 시일내에 답변을 주시면 매우 고맙겠습니다. 실은 제가 좀 급하거든요
원래... ServerSocket1.Socket.connection[index]식으로 접근 한답니다...
단지 어떻게 for루프문을 돌리는걸 최소화시켜 전달하느냐가 문제인데요..
일단.. 이용자가 서버로 접속을 할때 어떤 이용자가 접속했는지는 바로 알 수 있습니다. <- 당연한..
이때 이러한 사용자에 대한 소켓 정보를 담고 있는 테이블(TList 클래스를 쓰면 되겠고..)을 따로 마련해서 테이블의 각 항목에 소켓정보를 담구요..
이때 그 항목에 바로 접근할수 있는 색인값을 따로 기억해 놓습니다.
그리고.. 그 색인값을 통해서 바로 보낼수 있습니다.
각 사용자는 다른 사용자의 색인값을 기억하고 있으면 바로 보낼수 있겠죠..
물론... 여기엔 고려해야 할 사항이 좀 있지만.. 기본 핵심은 이거네요...
서버에 접속할때마다 신상정보를 입력하는 경우나.. 처음에 가입할때만 신상정보를 입력하는 경우나... 동일하구요..
PS:행여나 색인값을 잊어버렸다면.. 자신의 신상정보를 통해 색인값을 알아내야 할텐데
이때.. 검색은 당연하지만... 순차적인 검색법은 쓰면 안되겠죠..
(이때만 속도저하?가 있겠군요.. 일종의 하이텔에서 pf해서 누구 찾아보는식과 같은..
그리고.. 한번알고 난 이후로는 다시 기억해두는식으로..)
PS2:답변이 다소 부실한거 같지만... -_-;;;
ㅴㅭㅹㆄ wrote:
> ServerSocket1.Socket.connection[index]이라는 방법을 사용하지 않고 특정 클라이언트에 보내는 방법이 있을거 같은데요? 방법을 알고 있는 고수님 께서는 방법을 갈쳐주시면 고맙겠습니다. 아무리 생각해도 connection[index]으로 보내는 건 아주! 아주! 아주! 안좋은 방법인거 같은데
> 왜냐하면 클라이언트에서 접속이 끊겼을때 서버측에서 ServerClientDisconnect가 발생이 돼지 않는 경우가 아주 드물지만 있다고들 하더군요 또한 접속자수가 200명을 정도 돼는 채팅서버에서 일일이 index의 값을 찾기위해 for문등으로 돌릴경우 서버에 부하가 많이 걸릴거 같거든요
> 제가 알기로는 클라이언트가 물리적으로 접속이 끊겼을 경우 서버측에서는 클라이언트의 핸들값을 알아올수 있으며 이것을 이용해 바로 connection[index]따위를 읽어들이지 않고 바로 Close명령하나만으로도 연결을 끊을 수 있습니다. 글구 요청을 한 클라이언트에게 바로 ECHO시키기 위해서는 connection[index]를 사용하지 않고 Socket.SendText('사바사바'); 로 간단히 구현이 되는걸 보면 특정 클라이언트에게는 connections[i]의 방법말고 다른 명령을 이용해서 간단히 보내는 방법이 있을거 같은데...
>
> 서버측에서 LocalHost, LocalAddress, LocalPort, RemoteHost, RemoteAddress, RemotePort 중 하나를 잘 사용하면 가능하지 않을까 하는 재 갠 생각입니다.
>
> 만약 알고계신분이 계시면 주저하시지 마시고 빠른 시일내에 답변을 주시면 매우 고맙겠습니다. 실은 제가 좀 급하거든요
>