2014-05-09 1 views
0

소켓에 대한 C++ 및 상당히 새로운 기능의 재 학습. 제대로 작동하는 .net 응용 프로그램을 연결하는 파이썬 응용 프로그램이 있습니다.getaddrinfo에서 url : port/url을 사용하는 C++ 소켓 프로그래밍

전화가 필요한 URL은 www.domain.com:8080/signalr입니다. www.domain.com/signalr:8080을 호출하면 작동하지 않습니다. http://beej.us/guide/bgnet/output/html/multipage/clientserver.html#simpleserver

은 내가 노력할 상관없이, 내가 얻을 이름이나 서비스를 알 수없는 :

표준 예 것으로 보인다 무엇에 따라.

if ((rv = getaddrinfo("http://www.Domain.com:8080/signalr", PORT, &hints, &servinfo)) != 0) { 

PORT null을 남겨 두려고했습니다. 그냥 올바른 URL을 호출하는 방법을 알아 내려고.

그리고이 문제는 raspbian (debian)에서 실행됩니다.

의견을 보내 주시면 대단히 감사하겠습니다.

+0

8080은 포트 매개 변수에 들어갑니다. 브라우저는 getaddrinfo가 아니라 당신을 위해 그렇게합니다. – stark

답변

2

getaddrinfo()은 이름 확인입니다. HTTP 프로토콜을 구현하지 않습니다. 또한 URL을 구문 분석하는 방법을 알지 못하므로 직접해야합니다.

오른쪽 통화는 다음과 같다 :

getaddrinfo("www.Domain.com", "8080", ...); 

을 그리고 그 connect()를 호출하고 모든 소켓 물건을 할 수있는 권리 struct sockaddr*를 반환합니다.

모든 HTTP 프로토콜을 지원하는 기능을 원한다면 더 높은 수준의 라이브러리가 필요합니다. 나는 libcurl을 추천한다.

+0

HTTP 프로토콜을 구현하지 않는다는 것을 이해합니다. 불행히도 URL을 쉽게 변경할 수 없습니다 (가능한 경우라도). libcurl을 조금 사용했는데, 어떻게 든 올바른 URL을 호출 할 수 있도록 getaddrinfo와 통합 할 수 있다고 말하고 있습니까? – VirtualLife

+0

@VirtualLife : 아니요,'getaddrinfo()'는 아무데도 호출하지 않고 단지 호스트 이름을 해결하고 IP 주소를 제공합니다. 글쎄, 그것은 DNS를 호출하지만 그것은 중요하지 않습니다. 내가 이해할 수없는 것은'getaddrinfo()'를 URL과 함께 사용하는 것을 주장하는 이유이다. 결코 작동하지 않을 것이다. – rodrigo

+0

Gotcha, 나는 그것이 무엇을했는지 오해하고 있었다고 생각합니다. 나는 그것이 연결을 구축 한 조각이라고 생각했지만, 나는 그렇지 않다고 추측한다. 나는 그것에 대해 좀 더 연구 할 것이다. 도와 주셔서 고맙습니다. – VirtualLife