중복 로그인시 어케 못하게 할까요..

stypr의 이미지

채팅 프로그램을 짜는데요..

클라이언트(윈도우) <-------------> 서버( 리눅스 C로 작성) <--> USER DB

test 라는 아이디가 두명이 접속을 했을때.. 한명을 팅기게 해야 하는데

어케 해야 할지를 모르겠습니다. 여러분이라면 어떻게 처리 하시겠습니까

실시간으로 바로 팅기게 하여 ... 다른 사람이 로그인 하여 로그아웃 되었습니다 라는 메세지를 보내주고 싶거든요.

서버 프로그램은 C로 pthread 를 이용하여.. 짰거든요.

펑키의 이미지

안녕하세요.

순서는 원하시는데로 결정하시면 돼고 이중 로긴 못하게 하실려면 정상적인 로긴이 성공했을때 전역으로 저장해놓으시면 어떨까요.? 아마 그러하시겠지만 새로운 쓰레드가 생성될때 마다 새로운 메모리를 할당해서 무엇인가 저장해놓으시지 않으시나요.?

저의 경우에는 접속시간이라던지 기타 등등등..을 구조체로 할당해서 적어놓습니다. 이때 사용자 아이디도 존재합니다. 따라서 새로운 사용자가 로긴해들어올때 이곳을 검사해서 존재하는 사용자면 메시지를 보내 주고 바로 끊어 버립니다.

만약 기 접속된 사용자를 끊어 버리실려면 역시 같은 방법으로 찾으셔서 그것을 끊어 버리시면 어떨까요.? 물론 기 접속된 사용자의 fd는 저기와 같은곳에 저장시켜 놓으셔서 찾으시면 되고요.

즐거운 하루 되세요.

acetcom의 이미지

제 생각도 그렇습니다. pthread로 구현한다고 하셨는데, client의 특성을 나타내는 구조체를 잘 만들고 이를 Thread-safe한 리스트에 클라이언트가 접속할 때마다 추가하게 합니다. 위에 분도 지적하셨듯이 socket descriptor도 반드시 포함되어야 합니다.

그리고, close(socket_desc)하면, 이전에 접속으로 생긴 서버의 Thread는 socket recv함수가 block하고 있는 상태였다가 풀리므로 recv의 결과가 0이하일 때, break하게 하면 Thread도 안전하게 소멸시킬 수 있을 것입니다.

아무튼 이 부분을 주위깊게 구현하셔야 할 것입니다.

그럼.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.