Microsoft MVP성태의 닷넷 이야기
HTTP 프로토콜로 통신하는법? [링크 복사], [링크+제목 복사],
조회: 12893
글쓴 사람
박용운 (sialnuri at yahoo.co.kr)
홈페이지
첨부 파일
 

--;
갈수록 질문만 늘어가는군요. 에휴~~

제경우엔 주로 소켓(TCP)를 많이 사용하는데 이것으로 하면 방화벽이 있는곳에서 패킷이 제대로 전달되지 않는 경우도 있더군요.
그래서, 이부분에 대해서 알아보는데 대충 SOAP, HTTP Turning, RPC... 대부분 처음 듣는것으로 한다고 하더군요.
근데 어떤사람은 위 기술들은 실제 주고받는 통신에서 사용하는것이 아니라 서버쪽에서 패킷을 검사할때 사용한다고 하더군요.

즉, 아직까지 방향도 못잡고 있죠. 켁~~

이것도 IEHelpr에 붙일것인데
winsock수준에서 http로 통신할수있는 방법은 없을까요?








[최초 등록일: ]
[최종 수정일: 7/22/2003]


비밀번호

댓글 작성자
 



2003-07-21 05시15분
결국, 방화벽은 80 포트 이외에는 거의 모든 것을 막았다고 보는 것이 좋습니다.
따라서, WinSock 으로 80 포트로 접속하면 되겠지요.

하지만, 요즘에는 WinXP Professional 만 해도 IIS 가 올라가 있어서 80 으로 안되는 상황도 많을 것입니다. SOAP 역시 80 포트로 연결하는 것이죠. 나머지는 잊어버리십시오. 특별한 설정을 하지 않는 한 범용적인 환경에서는 사용할 수 없는 것들입니다.
정성태
2003-07-21 05시15분
안녕하세요? 답변은 잘보았습니다. 저희는 이 문제때문에 예전부터 80으로 통신을 했거든요. 그런데, 80으로 소켓통신을 해도 막히는 부분이 있더군요. 그래서, 생각한것이 http 프로토콜로 이용하자는것인데 방법이 막연할뿐 어떻게 해야될지 모르겠군요. SOAP관련 소스는 구했는데 이것은 클라이언트뿐아니라 서버쪽도 뭔가 세팅을 해야될것 같아서 안될것 같고, 그래서, 현재 서버쪽은 그냥두고 클라이언트입장에서 서버로 http 프로토콜로 메세지전송하는법을 할려고합니다. (서버는 현재 자바로 구현되었는데 GET 메세지는 받더군요. 클라이언트에서만 보낼수있으면 될듯) 이에 관련된 정보를 찾아보았는데 MFC에서는 CInternetSession로 사용해서 GET 정보전송하듯이 하는 소스가 있더군요. 그런데, 문제는 IEHelpr(BHO를 사용한 기본소스)에 붙여보니깐 에러가 뜨더군요. afx.h, afxwin.h, afxinet.h 이렇게 3개의 헤드파일이 필요한것 같은데 이것만 추가하면 WINDOWS.H already included. MFC apps must not #include 에러가 납니다. 이 상황에서 어떻게 해야할까요?
박용운
2003-07-21 05시15분
제가 방화벽에 대해서는 잘은 모르지만. 예전에 아시는 분이 방화벽 설정하는 것을 어깨너머로 보아온 바로는 프로토콜형식까지도 제어하는 듯 했습니다.

즉, 요청된 패킷의 형식이 HTTP Header / Body 구성이 아니면 Drop 시켜버리는 거죠.

아마도 80 으로 해도 막혔다면, 그런 연유인듯 합니다.

어쨌든 말씀하시는 것으로 봐서는 HTTP 프로토콜 구성을 모르실리 없을 것 같은 수준이신데요. HTTP 는 단지

GET /sysnet/webservice/CreateRandom.aspx HTTP/1.1
Connection: Keep-Alive
Content-Length: 338
Content-Type: application/x-www-form-urlencoded
Cookie: ASP.NET_SessionId=peesq255cema45552eb44uvy; VisitSite=true
Host: localhost
Referer: http://localhost/sysnet/Default.aspx
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)

위와 같은 형식의 헤더와 뒤이어 "\r\n\r\n" 이후에 나오는 본문이 있습니다.

즉 Winsock 으로 80 포트로 connect() 한후에,
send( "GET /sysnet/webservice/CreateRandom.aspx HTTP/1.1\r\n....." );
와 같은 식으로 하시면 되는 것입니다.
그러면은 실제로 서버로부터 Response 가 오게 되어 있지요.

그리고, IEHelper 는 ATL 예제일 텐데... 거기다가 MFC 라이브러리를 쓰시면 안됩니다. VC++.NET 으로 오면서 MFC 와 ATL 이 통합되었다고 하는데, C# 만을 전문으로 하다 보니 테스트해볼 기회는 없었습니다.
정성태
2003-07-21 05시15분
안녕하세요?
답변 감사합니다.

단편적인 코딩만 했었지 기술적으로는 거의 전무합니다.
한마디로 초보죠. ^^*

어째든, 80에서 막히는 문제때문에 기술적으로 찾아보았는데
SOAP는 서버환경(IIS, APACHE)에 따라서 클라이언트에 필요한 라이브러리가 다르고 물론, 서버에 접속하기위한 코딩도 다르더군요.
채팅이나 메신저같이 서버가 고정된곳이 아니라면 이 기술은 적합하지 않더군요.

또한, XML-RPC는 HTTP로 POST로 메세지를 주고받아서 80으로도 통신이 가능하다고 하더군요.
문제는 저희와 맞지않는것이 하나의 서버에서 웹도 사용하고 80으로 어플리케이션도 돌려야하는데 XML-RPC는 이것이 안되더군요.
단지, 방화벽만 피해갈뿐 클라이언트에서 전송한 메세지를 처리할 서버쪽 프로그래밍에서 포트를 정의해야되기때문에
이 기술도 저희와는 맞지않더군요.

마지막으로, 운영자님이 말씀하신 소켓으로 HTTP전송을 하는것인데
과연 이것만으로 방화벽을 통과할지는 아직 테스트를 거치지 않았기 때문에 모르겠습니다.
하지만, 현재 입장에서 이 방법이 최적의 방법이라 생각되는군요. 물론, 테스트를 거쳐서 되면 말이죠.
아니면, XML-RPC로 가야되구요.

별로 궁금은 안하시겠지만 테스트결과가 나오면 알려드릴께요.

그럼..수고하세요.
박용운
2003-07-21 05시15분
웹서버가 설치된 곳에서는 80 포트로 대기하는 또 다른 서비스 자체를 띄울 수가 없죠.

이렇게는 가능할 지도 모르겠습니다.
차라리, 80 포트로 대기해야 하는 서비스가 ... 자신이 설치되는 환경에 IIS 서버가 있는 경우에는 IIS 내부에 "가상 Application"을 설치하고, 몇 가지 정의된 ASP 등의 파일을 자동 설치하는 것입니다. 그리곤, 자신은 80 포트 이외의 것으로 (예를 들어 9000) 로 대기를 하는 것이죠.

ASP는 요청을 받은 그 내용을 그대로 9000 포트로 포워딩을 시켜주는 역할을 하도록.

아무튼. 정확히 어떠한 상황인지 몰라서. ^^;
얘기만 해봅니다.
정성태

... 91  [92]  93  94  95  96  97 
NoWriterDateCnt.TitleFile(s)
157이용휘4/20/20059145w3ip를 통해서 윈도우 미디어 화을을 올려놓을 서버..
158정성태4/20/20059580    답변글 [답변]: w3ip를 통해서 윈도우 미디어 화을을 올려놓을 서버..
155최성우4/18/200511241[질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
156정성태4/19/20059989    답변글 [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
161최성우4/21/200511059        답변글 [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
164정성태4/22/20059893            답변글 [답변]: [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
176최성우5/3/200510216                답변글 [답변]: [답변]: [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
146안연준4/14/200510930컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;;
147정성태4/14/20059798    답변글 [답변]: 컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;;
148안연준4/15/200510151        답변글 [답변]: [답변]: 컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;; [2]
142김용국4/13/20059995SmartClient 방식에서 이미지(바이너리)파일을 DataBased에 저장하기위한 방안에 대한 문의
143정성태4/14/20059593    답변글 [답변]: SmartClient 방식에서 이미지(바이너리)파일을 DataBased에 저장하기위한 방안에 대한 문의
141김종욱4/12/200510060웹하드 시스템을 ACTIVEX 로 짜고 있습니다
144정성태4/14/20059640    답변글 [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
149김종욱4/15/20059531        답변글 [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [1]
150정성태4/15/20059655            답변글 [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [1]
151김종욱4/16/20059963                답변글 [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
152정성태4/16/20059789                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
153김종욱4/18/200511472                        답변글 [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
154정성태4/18/200510763                            답변글 [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [3]
140안연준4/11/20059525Smart Client 에서 오프라인 글 중...의문점
145정성태4/14/20059361    답변글 [답변]: Smart Client 에서 오프라인 글 중...의문점 [1]
134김용국4/6/200513965c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
135정성태4/6/200512041    답변글 [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
136김용국4/6/200510846        답변글 [답변]: [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
137정성태4/7/20059998            답변글 [답변]: [답변]: [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
... 91  [92]  93  94  95  96  97