중복 로그인시 어케 못하게 할까요..
글쓴이: stypr / 작성시간: 목, 2003/09/04 - 11:43오후
채팅 프로그램을 짜는데요..
클라이언트(윈도우) <-------------> 서버( 리눅스 C로 작성) <--> USER DB
test 라는 아이디가 두명이 접속을 했을때.. 한명을 팅기게 해야 하는데
어케 해야 할지를 모르겠습니다. 여러분이라면 어떻게 처리 하시겠습니까
실시간으로 바로 팅기게 하여 ... 다른 사람이 로그인 하여 로그아웃 되었습니다 라는 메세지를 보내주고 싶거든요.
서버 프로그램은 C로 pthread 를 이용하여.. 짰거든요.
Forums:
순서는...
안녕하세요.
순서는 원하시는데로 결정하시면 돼고 이중 로긴 못하게 하실려면 정상적인 로긴이 성공했을때 전역으로 저장해놓으시면 어떨까요.? 아마 그러하시겠지만 새로운 쓰레드가 생성될때 마다 새로운 메모리를 할당해서 무엇인가 저장해놓으시지 않으시나요.?
저의 경우에는 접속시간이라던지 기타 등등등..을 구조체로 할당해서 적어놓습니다. 이때 사용자 아이디도 존재합니다. 따라서 새로운 사용자가 로긴해들어올때 이곳을 검사해서 존재하는 사용자면 메시지를 보내 주고 바로 끊어 버립니다.
만약 기 접속된 사용자를 끊어 버리실려면 역시 같은 방법으로 찾으셔서 그것을 끊어 버리시면 어떨까요.? 물론 기 접속된 사용자의 fd는 저기와 같은곳에 저장시켜 놓으셔서 찾으시면 되고요.
즐거운 하루 되세요.
제 생각도 그렇습니다. pthread로 구현한다고 하셨는데, client
제 생각도 그렇습니다. pthread로 구현한다고 하셨는데, client의 특성을 나타내는 구조체를 잘 만들고 이를 Thread-safe한 리스트에 클라이언트가 접속할 때마다 추가하게 합니다. 위에 분도 지적하셨듯이 socket descriptor도 반드시 포함되어야 합니다.
그리고, close(socket_desc)하면, 이전에 접속으로 생긴 서버의 Thread는 socket recv함수가 block하고 있는 상태였다가 풀리므로 recv의 결과가 0이하일 때, break하게 하면 Thread도 안전하게 소멸시킬 수 있을 것입니다.
아무튼 이 부분을 주위깊게 구현하셔야 할 것입니다.
그럼.
댓글 달기