[1796리플]다시 한번 정확하게 문의 드립니다

익명 사용자의 이미지

먼저 도움을 청하고자 하는것은
│ 핸드폰(웹)[brew]<--->소켓1 ,소켓2<--->웹서버(아파치)
│ 이런 구조를 만들려구 하는데
소켓2와 웹서버 사이에서는 html헤더가 붙습니다.
즉 [html헤더][실데이터]
여기에서

헤더 길이와 [실데이터]길이를 구하고자 하는데..
 
영 문서를 못 &#52287;겠습니다....어떻게 &#52287;을수 있죠??
 그래야만 recv(,,길이)를 정확하게 할 수 있을텐데요..블럭이 될텐데
요.
 
조금더 구체적으로 말하면..
 
 
 
    핸드폰(웹헤더) <------>  서버는(아파치)+php
          결국 http 통신이 서로 이루어 지고 있습니다.
   그런데 이 사이에다가 socket통신을 하는 프로그램을 삽입하려구 합니
다.
   즉
     핸드폰(웹)<--->소켓1 ,소켓2<--->웹서버(아파치)
   이런 구조를 만들려구 하는데
예를 들면---->      
  폰이    아파치에게 query스트링을 날려주면
     ex)  "GET /~계정/XXXXXX  HTTP/1.0   
             Host 211.55.45.45
             Accept */*
             User-Agent HTTP Lib Version 0.6"
           이렇게 날려 줍니다.
      그러면 서버는 폰에게
       ex)"HTTP/1.1 200 OK 
             Date Thu, 12 Sep 2002 103350 GMT
             Server Apache/1.3.20 (Unix) Resin/2.0.5 PHP/4.1.1 
mod_ssl/2.8.4 OpenSSL/0.9.6a X-Powered-By PHP/4.1.1
            Connection close
            Content-Type text/html
            XXXXX(데이터)"
       이렇게 header를 넘겨주고 넘겨 받으면서 connetion을 끊죠(http니
깐)
 
 이런 곳에서
              폰(웹) -----------소켓통신서버-------------웹서버(아파
치+PHP)
                             <--> 소켓1 ,  소켓2  <-->
이런 구조를 생각했습니다  (즉. 소켓1,2가 공유데이터(쿼리+웨서버가 내
려주는 데이터)를 가진)
 그래서 구현을 요약하면.
        main()
       {
              int ph_s=socket(..);
              int web_s=socket(...);
              char *com_buff;
 
             bind(ph_s,....);
             listen(ph_s,100);
             accept(ph_s,...);  //폰에서 접속요청.
               com_buff=read(ph_s,폰으로 부터 요청 데이터를 받는다);
 
             connect(web_s,웹서버주소+포트80...);  //<==질문1..이렇
게 하면 웹과 통신이 가능한가요? 
                write(web_s,com_buff); 
                com_buff=read(web_s,웹으로부터 데이터를 받는다);  
 
                write(ph_s,com_buff);
 
             close(web_s); 
             close(ph_s);
       }             
 
이렇게 구현하면 되는 것인지... 경험이 없어서.. 확신할 수가 없네요.
 
조언을 부탁드립니다.
익명 사용자의 이미지

WAP 관련소스는 freshmeat.net 가시면 원하는 만큼 구할수 있습니다.

얘기하시는걸 보니 서버 모듈이 좋아야 하겟군요..
서버 모델은 뭐라고 말을 해야 할지 모르겠군요..

서버제작 경험이 별로 없다면 그냥 아파치에서 해결하는 방법을
쓰시라고 말씀드리고 싶습니다..

간단하게 만들면 10분에도 만들겠지만 그렇게 만만한 작업이 아닙니다.

서버 모델은 Unix network programming 같은 책에서 참고하시구요..
(꼭 원서로 구해 보세요..)

어떤 기능을 하고 싶어서 그러시는진 잘 모르겠습니다만...

제생각엔 그냥 아파치에서 처리해도 될 내용인듯 싶습니다만.......

익명 사용자의 이미지

핸드폰(웹헤더) <------> 서버는(아파치)+php
결국 http 통신이 서로 이루어 지고 있습니다.
그런데 이 사이에다가 socket통신을 하는 프로그램을 삽입하려구 합니다.

1.핸드폰(웹)<--->소켓1 ,소켓2<--->웹서버(아파치)
2.핸드폰(웹)
3.핸드폰(웹) ...
이렇게 폰은 여러개가 동시에 접속해 오는 이런 구조를 만들려구 하는데

구조를 다시 정리해 봅시다
[질문1] while 과 fork() 구조를 생각해 보았습니다
이것이 문제 없는 구조인지..아니면..다른 어떤 것을 고려 해야 하
는지...조언을 부탁드립니다.

[질문2] select라는 것을 생각하고 있는데....
정확하게 여기에 적용이 안 되는것으로 생각되는데....
이것을 사용한다면..(가능한 구조라면) 어떻게 사용해야 할는지에
조언을 부탁드립니다..
=========>소스========>
int main()
{
int server_fd,client_fd; //phone , web접속을 상징
struct sockaddr_in server_addr,web_addr;
pid_t pid;
char conn_buff[15000]; //가장 많은 패킷을 설정...
//[질문] 메모리 줄일 수 있는 방법은 없나
요??

server_fd=socket(...);

bzero(server_addr...); //==>나에게 폰이 연결하도록 내꺼 셋팅
server_addr=...;
bind(port...);
listen(ph_sock,100); //동시 ..대기.. //<==

while(1) //항상 서버는 살아 있도록.
{
client_fd=accept(server_fd..);
if((pid=fork())>0)//부모 // 1.폰으로부터 내용을
받고
{
LEN=read(client_fd., conn_buff, fix_len );
}
else if(pid==0)//자식
{
bzero(web_addr...);
web_addr=....; //80포트
client_fd=connect(web_addr..);
write(web_fd, conn_buff,LEN); //2.폰에서 읽은것 웹
서버로 넘긴다
LEN=read(web_fd,conn_buff, fix_len); // 3 웹에서 설정된 길
이 많큼 읽는다
write(client_fd,conn_buff,LEN); // 4 웹에서 읽은 것
을 폰으로 넘긴다
close(client_fd);
close(web_fd);
exit(0);
}
else{;}
close(cient_fd);
}
}

PS))
결론적으로 폰과의 통신에서는 BILLCOM을 적용하려고.. 이런 구조를 만 들것 이거든요..^^*
maximus wrote..
WAP 관련소스는 freshmeat.net 가시면 원하는 만큼 구할수 있습니다.

얘기하시는걸 보니 서버 모듈이 좋아야 하겟군요..
서버 모델은 뭐라고 말을 해야 할지 모르겠군요..

서버제작 경험이 별로 없다면 그냥 아파치에서 해결하는 방법을
쓰시라고 말씀드리고 싶습니다..

간단하게 만들면 10분에도 만들겠지만 그렇게 만만한 작업이 아닙니다.

서버 모델은 Unix network programming 같은 책에서 참고하시구요..
(꼭 원서로 구해 보세요..)

어떤 기능을 하고 싶어서 그러시는진 잘 모르겠습니다만...

제생각엔 그냥 아파치에서 처리해도 될 내용인듯 싶습니다만.......

익명 사용자의 이미지

일단 책을 한권 사서 공부를 좀 하시는게 우선일듯 싶습니다..

그렇게 하기 답답하시다면 말씀하신 형태로 직접 제작을 해보세요..

per fork 로 하든 pre fork 하든 용도에 따라 틀리니..

일단 만들어서 돌려 보세요.

그러고 난후 stress 테스트를 해보면 대충 감이 오지 않을까요 ?

익명 사용자의 이미지

현재 서버 모듈로서 제작하고 있습니다.
그리고 스트레스 테스트 중이고요..

그런데...말씀 중에 아파치에서 수정할 수 있다고 하셨는데..
제가 아파치는 설치만 해 보았거든요..

소스는 보지 못 햇지만서두..
어느 부분을 고려 해야 하는지 알려 주실수는 없는지요??

============================================
사람을 사랑하는 sean@mcome.com

익명 사용자의 이미지

어디를 보셔야 할지는 님이 아파치 소스에서 뭘 얻고자 하는지
잘몰라서 말씀 드리기가 좀 그렇고 소스 분석에 도움이 될만한 글을
남기지요..

아파치 소스가 생각보다 규모가 큽니다..
지원하는 플렛폼도 다양하고 하는 일도 많아서리... 그렇죠..

전에 제가 아파치 분석할때 참고한 자료입니다.
http//www.ezdoum.com/stories.php?story=02/08/14/1029605

그리고 그냥 소스를 컴파일 해서 디버거 돌려보면서
소스를 따라가면서 분석을 하실려면,
http//www.ezdoum.com/comments.php?rid=02/08/17/3254153&bid=02/08/17/6349113
이런 식으로 gdb돌려보면 코드 이해하는데 도움이 될껍니다.

익명 사용자의 이미지

HTTP/1.1 200 OK
Date Thu, 12 Sep 2002 103350 GMT
Server Apache/1.3.20 (Unix) Resin/2.0.5 PHP/4.1.1
mod_ssl/2.8.4 OpenSSL/0.9.6a X-Powered-By PHP/4.1.1
Connection close
Content-Type text/html
XXXXX(데이터)

HTTP라고 해서 별다른것은 없습니다. 질문하신 내용중에 클라이언트(B 서
버)에서 서버(C 웹)로 가는것은 GET이므로 별다른것은 없습니다. 단지 웹
서버에서 B 서버로 올때는 웹서버에 따라서 조금씩 다른것 같습니다. 제
생각에는 서버에 따라서가 아니라 세팅에 따라서 그런것인지 정확히는 모
르지만 저도 급하게 하느라구... 우선 아파치 서버는 한번에 웹페이지의
헤더부와 바디부(XXXXX(데이터))를 보내줍니다. 그런데 IIS+JRUN 서버의
경우넨는 이것을 두번에 나누어 보내주드라구요. 그래서 두번씩 읽게 해놓
았습니다.

많은 분들이 HTTP 통신에 대해 여쭈어 보면 RFC를 보아라 LIBWWW 를 사용
해라 하시지만 실제 RFC를 읽는 다는것은 너무도 힘듭니다. 양이 너무 많
고 정말 꼭 필요한것이 어떤것인지 알기 힘들죠. 그리고 LIBWWW를 자신의
프로그램에 붙여 넣기는 더욱 힘듭니다. 그것을 읽어서(물론 정확하고 확
실한 방법이지만) 손쉽게 할수가 있다면 누구도 이곳에 올 이유가 없죠.
특히 comp.lang.c <-- 요기 사람들은 대답보다 책을 보라 RFC 읽어 보아
라, 질문하는 방법이 틀렸다 등등에 보다 메달리니깐 잘 찾아봐도 않나오
드라구요.

제가 LYNX를 이용해서 몇가지 방식을 추출해놓았는데 나중에 한번 정리해
서 올려놓겠습니다. 시간이 되면 KLDP문서로 올려 놓는것도 좋을것 같네
요. 그런데 질문 하신 내용에 답이 전부다 있는것이 맞습니다.

1. 클라이언트의 서버 접속 + 데이터 전송
2. 서버의 데이터 변환후 HTTP용 헤더 + 데이터 전송
3. 서버에서 웹에서 리턴되어 오는 HTTP용 헤더 + 데이터를 받기
4. 기타 처리 하기.. 등등

이 순서대로만 하시면 됩니다. GET의 경우 웹서버에서 특별히 해줄것이 없
으니깐 그냥 일반 웹서버 페이지들을 대상으로(미안하지만) 테스트를 해보
시는것도 좋을듯 싶습니다. 그리고 메시지의 사이즈는 HTTP 헤더부에 표시
되어 오니깐 그것을 참조하세요. 헤더부는 웹 서버쪽에서 마음대로 정의할
수 있는 내용입니다.

한번 해보시고 않되면 다시 포스팅 해주세요. 제가 구체적으로 코드를 한
번 올려 드릴께요. 건강하세요.

아 제가 보니깐 횡설수설 했네요. 몇가지 다시 정리 해볼께요.

[전송순서]
1. 클라이언트의 서버 접속 + 데이터 전송
2. 서버의 데이터 변환후 HTTP용 헤더 + 데이터 전송
3. 서버에서 웹에서 리턴되어 오는 HTTP용 헤더 + 데이터를 받기
4. 기타 처리 하기.. 등등

[참고]
1. 웹에서 데이터를 받아올때 TIME-OUT값을 설정해두세요. 웹에서 반응이
무지 느릴때가 왕왕있드라구요. 저는 RECV()용 함수를 SELECT로 따로 만들
어서 해결했습니다.

2. IIS+JRUN 서버의 경우 헤더 + 바디 가 분리되어 두분에 걸쳐 전송되어
올때가(웹에서 서버로)있습니다. 이것은 제가 웹서버쪽 담당이 아니래서
잘 모르겠습니다. 나중에 알게 되면 올려 드릴께요. 따라서 받을때 두번
에 걸쳐서 받으면 됩니다.

3. GET METHOD의 경우 일반 게시판 프로그램쪽에(PHP나 이런쪽) 직접 쏘아
서 값을 받아 오는 연습을 해보셔도 됩니다.

4. 웹서버에게 접속을 끊지 않고 계속 연결하게끔 해도 되지만 아무런 의
미가 없습니다. 필요시 접속후 끊으세요.

5. 인증은 헤더부의 쿠키 정보를 이용해보세요.

하여간 다시 리풀 달아 주세요.

댓글 달기

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