참고할만한 다중소켓서버 코드 없을까요?

maindb의 이미지

C 는 잼뱅이라서...
열심히 구글링 해서 찾고 있는데...

일반 단일 소켓서버 프로그램 코드들은 많이 나오는데
다중소켓서버는 보이질 않네요.

허접한 실력의 PHP 초보 개발자인데...
요구하는 것은 php 의 fsockopen 으로 열어서
fput 으로 메세지를 보내면 소켓서버데몬이 그 메세지를 받아서
system() 으로 특정프로그램을 실행하면 되는 것입니다.

단일 소켓서버 프로그램 코드들이 보여서 적용해 보았는데...
잘 되긴 잘 되는데 동시에 여러곳에서 fsockopen 을 했더니
제대로 처리가 안되고 빼 먹고 지나가는 것들이 있더군요.

이것저것 열심히 구글링 해봐서 찾아본 결과가 다중소켓서버여야 한다는군요.
여기까지는 알아내서 현재 열심히 찾아보고는 있는데 힘드네요 ㅜ.ㅡ

허접한 실력이 화가 납니다. 질문을 해도 간단한 거라고만 하고... ㅠ.ㅠ
정말 비참함... :cry:

조언을 좀 구합니다.
부탁드립니다.

bugiii의 이미지

그 서버라는 것이 특정 명령을 실행하면 되는 것이라면... 따로 만들지 말고 간단하게 rsh 이나 ssh 등으로도 가능하지 않을까 생각합니다만...

codebank의 이미지

직접 프로그램을 만들어보고 싶어서 그런것인지도 모르죠. :)
나중에 rsh등을 사용하게 되더라도 원리를 모르고 사용하는것과는 조금 다르지 않을까요?
결과는 같겠지만요. :)

구글링을 이용한 검색결과의 소스 대부분은 fork나 thread를 염두해두지 않은 소스들이
많이 있는것으로 알고 있습니다.
필요한 기능을 위해서는 fork나 thread를 이용하는게 맞는것 같네요.
다중소켓보다는...
즉, socket을 감시하고 있다가 연결이 들어오면 read를 하지말고 fork나 thread로
그 실행권한을 돌려버리고 메인은 다시 socket을 감시하는 형태가되면 될것같은데요.

P.S. : 만일 사용한 소스가 fork나 thread를 사용했다면...
다중소켓도 그리 어려운것은 아닙니다. 물론 이부분도 fork나 thread로 각 소켓마다
하나의 fork나 thread를 할당해주는 방법이나 select를 이용한 방법등을 구사하면
되겠죠.
구글링을 통해서 소스를 받아서 나름대로 공부하는것도 좋지만 일단은 네트워크 프로그램에
관련된 책을 구입해서 읽어보실 것을 권해드리고 싶습니다.

------------------------------
좋은 하루 되세요.

maindb의 이미지

ssh 요? ssh 대하여 아는것이라고는
기껏해야 telnet 대용의 Secure Shell 이라는것으로
리모트 터미널 접속하는것과 scp 명령어 가끔사용하는
방법 외엔 아는게 없습니다.
구글링 해봐도 저 위에 두개에 대한 내용밖에 안보이네요.

ssh 로 어떻게 가능하죠? 힌트를 조금만 더 배풀어 주세요 ^^;;;

jinoos의 이미지

maindb wrote:
ssh 요? ssh 대하여 아는것이라고는
기껏해야 telnet 대용의 Secure Shell 이라는것으로
리모트 터미널 접속하는것과 scp 명령어 가끔사용하는
방법 외엔 아는게 없습니다.
구글링 해봐도 저 위에 두개에 대한 내용밖에 안보이네요.

ssh 로 어떻게 가능하죠? 힌트를 조금만 더 배풀어 주세요 ^^;;;

ssh my.host.com "/bin/ls -la /"

ssh 관련 키 설정이 되어있다면 login 없이 바로 결과를 화면에 출력할수 있습니다. ssh 로 로긴후에 "" 의 내용을 실행하고 바로 종료한다고 생각하시면 됩니다.

목적을 찾아서... jiNoos

liongo의 이미지

http://people.kldp.org/~eunjea/ssh/

ssh 설치및 사용법을 소개하고있습니다..

jinoos님이 언급하신 키를 사용하여 인증절차를 보안키를 등록해서

별도 입력없이 쉘접속이나 쉘명령을 내릴수있는 방법을 찾으실수 있습니다.

매우 편리한 방법이지요. 사용법을 잘익히시는것이 보안에 안전합니다..

' 형식이 내용을 규정한다. '

bugiii의 이미지

codebank wrote:
직접 프로그램을 만들어보고 싶어서 그런것인지도 모르죠. :)
나중에 rsh등을 사용하게 되더라도 원리를 모르고 사용하는것과는 조금 다르지 않을까요?
결과는 같겠지만요. :)

구글링을 이용한 검색결과의 소스 대부분은 fork나 thread를 염두해두지 않은 소스들이
많이 있는것으로 알고 있습니다.
필요한 기능을 위해서는 fork나 thread를 이용하는게 맞는것 같네요.
다중소켓보다는...
즉, socket을 감시하고 있다가 연결이 들어오면 read를 하지말고 fork나 thread로
그 실행권한을 돌려버리고 메인은 다시 socket을 감시하는 형태가되면 될것같은데요.

P.S. : 만일 사용한 소스가 fork나 thread를 사용했다면...
다중소켓도 그리 어려운것은 아닙니다. 물론 이부분도 fork나 thread로 각 소켓마다
하나의 fork나 thread를 할당해주는 방법이나 select를 이용한 방법등을 구사하면
되겠죠.
구글링을 통해서 소스를 받아서 나름대로 공부하는것도 좋지만 일단은 네트워크 프로그램에
관련된 책을 구입해서 읽어보실 것을 권해드리고 싶습니다.

어떻게든 귀찮은건 피해가 보자는게... 여기 KLDP 분위기 아닌가해서요... -_-;

leilei의 이미지

maindb wrote:

단일 소켓서버 프로그램 코드들이 보여서 적용해 보았는데...
잘 되긴 잘 되는데 동시에 여러곳에서 fsockopen 을 했더니
제대로 처리가 안되고 빼 먹고 지나가는 것들이 있더군요.

문득...... 이미 되어 있을 수도 있지만..
혹시 잘 동작하는데.. recv를 할때 패킷별루 분류( ? )가 안되는게 아닐까 하는 생각이듭니다.. size를 넣어서 size만큼 받는 걸 넣어 보심이.. :)

참고로.. php쪽에서 10B씩 여럿이 빠방~ 쏘면.. 서버에서 읽을 때 10B씩 읽어지지 않을 수 있습니다.. 혹시나 해서 확인사살이었습니다.. -_-a

댓글 달기

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