채팅 프로그램을 만들어 보고 싶습니다.

scv7905의 이미지

Linux를 이용해서 간단한 chatting프로그램을 만들어 보고 싶습니다.
기본적인 설계는 select를 사용해서 채팅방을 구분해서 접속하고
udp socket_server/ socket_client 에 fork와 thread를 사용할까 합니다.
보잘것 없더라도 이왕이면 공부한것을 바탕으로 실습을 하고 싶습니다.
올바른 구현을 위한 설계조언, tip, 핵심부분등 설명 부탁 드립니다.

-목표-
1.Linux를 사용
2.chatting 프로그램 설계
3.채팅방 구현
4.select를 사용하여 채팅방 선택 입장
5.udp or tcp 서버 사용(원활할 채팅을 위해 udp를 사용할까 합니다)
6.thread사용 (process식으로 하면 채팅방 구현시 자원 활용도가 떨어질꺼 같네요)
현재 아래 내용까지 공부했습니다(60~70% 이해 중 -_-;;)
7.socket_server/ socket_client(tcp, udp, fifo - 아직 ehco는 모릅니다)
8.fork(), wait, pipe(), thread, mutex, exec
9.select(공부 중)

-계획(설계)-
1.udp_server를 만든다
-client가 접속 할 때까지 대기
-fork와 thread를 사용한다
-채팅방은 최고 10개, 한개의 채팅방에 최대 인원은 10명으로 제한 한다

2.process는 chatting room이 되고 thread는 채팅방 인원이 된다.

3.처음 접속하는 client는 process를 생성하고 usr_1의 닉네임을 부여 받는다.
-생성된 process는 chatting_room_1(0)이 된다.
-(0) : 접속자 수를 나타낸다.(thread수)

4.두번째 접속하는 client는 선택 할 수 있다.
-새로운 채팅방을 만들경우 : 새로운 process(chatting_room_2)를 생성하고 usr_1이 된다
-만들어진 채팅방에 들어갈 경우 : thread를 이용하여 usr_2로 접속하며 접속 되어 있는 있는usr_1과 채팅

5.채팅방에 사람이 다 나가면 process는 삭제된다.

6.새로 생성되는 process는 사라진 이전 process의 번호를 부여받는다.
- chatting room_2(1) chatting room_3(0)(삭제) chatting room_4(4)
- chatting room_2(1) chatting room_4(4)
- chatting room_2(1) chatting room_4(4) chatting room_3(1)(생성)

appler의 이미지

7번에 fork()인듯..

http://www.joinc.co.kr/modules/moniwiki/wiki.php/epoll

여기 한번 가보시면 좋을듯..


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

scv7905의 이미지

제가 설계 부분을 올리지 않았네요.
추가 했습니다.

사랑해요. 리눅스.

cleol의 이미지

일단 만들어보세요. 실제로 만들어 보는게 가장 큰 공부입니다. 한 번 완성해보고 나서 다시 읽을거리를 찾아서 공부하세요.

scv7905의 이미지

실습이 중요하다는 것은 알고 있습니다만
제가 설계한 부분이 현재 공부중인 범위를 넘어서지 않는가 궁금해서요
넘어선다면 더 공부를 하고 가능하다면 당장 시작 할려구요
나름 계획을 세우고 기간내 완성해 보고자 하여 질문 하는 것이니
따뜻한 조언 부탁드립니다.

사랑해요. 리눅스.

peccavi의 이미지

배운것을 모두 활용하는것도 좋겠지만,
어떤것을 사용하고, 어떤것을 사용하지 않을지 추려 내는 능력도 중요하다고 생각합니다.
결국엔 경험이, 그것을 결정하는 능력이 되겠지요.
예를들면, 원활한 채팅을 위해 UDP를 사용한다고 말씀하셨습니다만
UDP를 사용하게 되면서 뒤따르는 작업을 모두 감당하려면
차라리 TCP를 이용하는 편이 UDP보다 원활한 경우도 있다고 생각하거든요.
물론 실무에서의 작성이 아니라면, 여러가지 모델로 여러가지 코드를 작성해 보시는게
가장 좋을듯 싶습니다. ^^;

----
jai guru deva om...

----
jai guru deva om...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.