Microsoft MVP성태의 닷넷 이야기
HTTP 프로토콜로 통신하는법? [링크 복사], [링크+제목 복사],
조회: 12954
글쓴 사람
박용운 (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 포트로 포워딩을 시켜주는 역할을 하도록.

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

... 61  62  63  64  65  66  67  68  69  [70]  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
818개발돌이8/14/200917089ActiveX개발한 dll을 임베디드 할때 UI에 대한 질문 [1]파일 다운로드1
817채승수8/13/200916360클릭원스 관련 질문드립니다.~ [1]
816박진오7/29/200915689다국어 사이트의 컨텐츠 저장 방식에 대해.. [2]
814서광원7/16/200924629IWebBrowser2를 이용한 프로그램에서 javascript의 alert 창 무시하는 법? [1]
813윤상균7/16/200915511비관리코드와의 상호운용에서 마샬링 질문 [1]
812김현우7/13/200915978usercontrol은 mdi container가 될수 없는데 이를 구현할 방법은 무엇일런지요? [2]
811조민수7/3/200915455MSDN Magazine 한글화 않되나요? [1]
810세경6/29/200920874SmartClient Vista 64bit IE7 [4]
809윤석준6/24/200920865IE -nomerge 옵션으로 새창을 열려고 합니다. [1]
808한승훈6/4/200919640dll import하기 위해 struct 구성시에 struct가 struct를 가지고 있고 포함된 struct가 ByValArray형태일때 해결 [1]
806곰티5/26/200917821defcon pro 설치 원천 봉쇄 방법 문의 [3]
802채승수5/8/200916885신뢰사이트 등록/적용에 관해 질문드립니다. [1]
801채승수4/15/200917734IE8 새세션을 코드로 구현할수 없을까요 [1]
800신동열4/7/200917913IE8에서 스마트 클라이언트 로딩 문제 [2]
7993/27/200921716이벤트 로그 오류 [1]
798천해3/26/200918187IE8.0 에 관해 질문 드립니다. [2]
797궁금..3/23/200918091IE 8 관련 질문.. [2]
796정성태3/20/200916759스마트클라이언트와 ActiveX에 관한 질문 [1]
795김기용3/19/200916396[질문] DHTML 다이얼로그 관련 [2]
794박평옥3/18/200916740Vista에서 URL Shortcut 실행 시 SetSite가 두 번 호출되는 증상에 관해 조언 부탁드립니다. [2]
792김기용3/12/200915892어제 세미나 잘 들었습니다. 질문사항이 있습니다.(ie8 마이그레이션 관련) [4]
791vb표성백2/17/200921359ATL 로 만든 COM 에 문자열 전달하기! C#에서 어떻게 하나요? [1]
790고민중2/16/200914019vista에 vs2005를 사용중입니다. [1]
789지언2/14/200916067MFC & C#(COM) 호환 관련하여 답변좀 부탁드립니다 [2]
788하루야채2/3/200915037스마트클라이언트 Windowless 설정에 대해서 문의드립니다. [2]
787궁금이2/2/200915505TFS 관련하여 질문드리고자 합니다. [2]
... 61  62  63  64  65  66  67  68  69  [70]  71  72  73  74  75  ...