2011-10-23 45 views
1

我是套接字編程的新手,並試圖讀取嵌套在網站目錄中的在線dat文件。我可以連接到主網站,但不能連接其任何子目錄或我嘗試訪問的其中一個文本文件。可以訪問的網站,但不是文本子目錄中的文件

即我可以連接到www.mainsite.com,但不是www.mainsite.com/dir1/dir2/textfile.dat。我想閱讀使用recv或閱讀文本文件,我不介意訪問它像一個不同的方式,如說fdopen等...

我在gnu c與Windows 7機器上的cygwin寫這篇文章。

爲了保護隱私,我將使用匿名網站名稱。我使用下面張貼的部分代碼 - 謝謝你:

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

提出一個web客戶端的不僅僅是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是如何工作的,還有很多東西需要學習。從Wikipedia頁面開始,然後從那裏分支....

如果您不太瞭解如何理解HTTP的工作原理,您可以查看cURL這是一個非常流行的庫,它實現了HTTP,使生活成爲對於想要編寫簡單客戶端而不進入醜陋細節的人(比如你)更容易。

+0

非常感謝。看起來你可以通過發送函數使用所有的HTTP命令,比如GET,然後使用recv來讀取我試圖打開的文件。 (跳舞bannana表情符號)! –

相關問題