2011-10-23 2 views
1

저는 소켓 프로그래밍에 초보자이며 웹 사이트 디렉토리에 중첩 된 온라인 dat 파일을 읽으려고합니다. 기본 웹 사이트에 연결할 수 있지만 하위 디렉토리 나 그 중 하나에서 액세스하려는 텍스트 파일에는 연결할 수 없습니다.웹 사이트에 액세스 할 수 있지만 SubDirectory의 텍스트 파일이 아닙니다.

즉 www.mainsite.com에 연결할 수는 있지만 www.mainsite.com/dir1/dir2/textfile.dat에는 연결할 수 없습니다. 내가 recv 또는 읽기를 사용하여 텍스트 파일을 읽고 싶습니다, 그리고 나는 fdopen 요법과 같은 다른 방법에 액세스하는 것을 신경 쓰지 않아요 ...

나는 이것을 gnu c에서 cygwin과 함께 Windows 7 컴퓨터에 작성했습니다.

개인 정보 보호를 위해 익명의 웹 사이트 이름을 사용하겠습니다. 내가 아래에 게시되어 사용하고있는 코드의 일부는 - 고마워요 :

if(getaddrinfo("www.mainwebsite.com","80" /*this works as it stands and fails if I use 
        , &hints, &res)!=0)  www.mainwebsite.com/subdir/textfile.dat */ 
    ....... 
    ....... 
    /*create new socket*/ 
int newsocket = socket(res->ai_family, res->ai_socktype, 0); 
..... 
int newconnect = connect(newsocket, res->ai_addr, res->ai_addrlen) 
..... 

답변

1

웹 클라이언트를 만들기 그냥 connect 디렉토리로 보내고보다 훨씬 더 복잡하다. www.site.com에 연결 한 후 write에 HTTP GET 파일을 요청한 다음 read 응답 (파일의 내용 포함)을 요청해야합니다.

GET 요청의 텍스트는 다음과 같이 표시됩니다

const char *req = "GET /subdir/textfile.dat HTTP/1.1\r\nHost: www.site.com\r\nUser-Agent: myprogram\r\n\r\n"; 
write(newsocket, req, strlen(req)); 

이있는 하이퍼 텍스트 전송 프로토콜 (HTTP) 요청을. HTTP가 어떻게 작동하는지 실제로 알고 싶다면 더 많은 것을 배워야합니다. 위키 피 디아 페이지에서 시작하여 거기에서부터 분기하십시오.

HTTP가 어떻게 작동하는지 정확하게 이해하는 데 관심이 없다면 HTTP를 구현하는 매우 인기있는 라이브러리 인 cURL을 조사하면됩니다. 못생긴 세부 사항에 빠지지 않고 간단한 클라이언트를 작성하려는 사람들 (당신 같은)에게는 훨씬 쉽습니다.

+0

감사합니다. send funtion을 통해 GET과 같은 모든 HTTP 명령을 사용하고 recv를 사용하여 내 경우에는 내가 열려고했던 파일을 읽을 수 있습니다. (bannana 이모티콘 춤)! –

관련 문제