Microsoft MVP성태의 닷넷 이야기
HTTP 프로토콜로 통신하는법? [링크 복사], [링크+제목 복사],
조회: 12947
글쓴 사람
박용운 (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)
1053폭풍코딩4/19/201216527스마트클라이언트 ctrl-c 복사가 작동하지 않습니다. [1]
1052에슈리온4/17/201232955ClickOnce 배포시 클라이언트의 설치경로를 지정할 수 없나요? [1]
1051최정수4/10/201219838WCF 클라이언트 비정상 종료 관련 [1]
1050에슈리온4/6/201222006관리자 권한과 ClickOnce, 그리고 Bootstrapper문제 [6]
1049김성혁4/4/201216586스마트클라이언트 stand-alone 방식의 배포 문제.. [1]
1048C#조으다3/27/201220148어셈블리 로드 / 언로드와 관련해서.. [6]
1047김우형3/23/201217730WCF 서비스를 이용한 데이터 전송 중 Exception 문의 [1]
1044임동찬2/29/201217604웹에서 COM Exception.. [2]
1043박성준2/24/201216138Lazy<T> 의 지연객체 생성 전에 실 객체의 Attribute분석 [2]파일 다운로드1
1042이성환2/20/201216575BlockingMethod에 빠진 스레드를 즉시 죽이고 싶습니다...;ㅅ; [2]파일 다운로드1
1039김재영2/15/201215896어셈블리에 사용자마다 다른 값을 적용하여 자동 빌드 방법이 있을까요? [2]
1037윈드로니2/12/201217324WPF 관련 질문 드립니다. [2]
1035임동찬2/9/201215689XML, XSD, XMLCodeGenerator 관련 [2]
1033곽성현2/7/201216205훔..윈도우 디바이스 드라이버 관련 [1]
1030궁빈2/2/201218640msbuild를 이용한 웹게시 및 자동 Dist 방법론에 대해 질문 드립니다!! [6]
1028신정환1/30/201215885기존 legacy Windows application이 WoA 환경에서 동작되지 않는 이유가 무얼까요? [2]
1026노현철1/19/201217856WPF가 XP에서 느리게 로딩되는 현상에 대해 질문드립니다. [4]
1025궁그미1/18/201218817네이버 소켓 로그인 이해가 안되는점이 있는데요 [2]
1022선무당1/11/201216886TFS 에서 공통 Assembly 공유 방법에 대해서 해결책이 없을까요? [2]
1021김재영1/8/201215950대리자를 메소드 파라메터로 넘겨도 됩니까? [2]파일 다운로드1
1019남산골11/13/201918546안녕하세요!! 성태님~~ [3]
1018강한구12/29/201121865WPF ClickOnce 배포시 콤포넌트 dll 다운로드 문제에 대하여 질문 있습니다. [1]
1017임동찬12/28/201118764smart client와 xbop, silverlight [6]
1015개똥이12/22/201116182RMCLOCK 설정 관련 질문이요ㅜ [2]
1011사길수12/16/201116244hyper-v 이더넷 카드 관련 문의 좀 드립니다. [1]
1006루로니12/13/201118366윈도우7과 XP의 DLL후킹 처리에 관해서 질문입니다. [3]
... 61  62  [63]  64  65  66  67  68  69  70  71  72  73  74  75  ...