2011-06-10 46 views
0
newsockfd = accept(sockfd, struct sockaddr *) &cli_addr, &clilen); 
FILE *write = fdopen(newsockfd, "w"); 
fprintf(write, "some html code is here"); 
fflush(write); 

n = read(newsockfd,buffer,255); 
printf(buffer); 

基本設置是一個用C編寫的服務器,它等待客戶端連接,然後將它們發送到HTML代碼以顯示頁面。C與HTML頁面的客戶端/服務器通信

當我沒有最後兩行代碼時,這臺服務器工作正常,我可以用我的瀏覽器連接到它,看到我用html編寫的東西顯示得非常好。問題出在頁面上我有一個HTML表單,所以我想能夠讓我的C服務器上的表單輸入到表單中。當我添加最後兩行代碼從客戶端讀取,然後嘗試通過Web瀏覽器連接到服務器時,我不再看到網頁上顯示的窗體或其他任何內容,並且我的服務器只是等待響應。

我的問題是爲什麼當我添加這些代碼行時,客戶端不再看到網頁上應該顯示什麼,是否有更好的方法來做到這一點?

回答

0

你正試圖從頭開始編寫一個Web服務器...我無法想象一個更困難的方式來完成這一點。 HTTP協議是無狀態的。服務器在TCP端口上偵聽新連接。客戶端連接並向服務器發送HTTP請求。服務器解析HTTP請求並將HTTP響應發送回客戶端。客戶端斷開。收到響應後,Web瀏覽器通常不會保持TCP連接對Web服務器開放。這也有例外,但這要求您向客戶端發送特殊的HTTP標頭,並且您的服務器支持它。

可能我謙恭地建議你救自己受了很多痛苦通過執行以下操作:

  • 安裝一個網絡服務器(Apache的就足夠了)。這將使您從所有C套接字代碼中解放出來,讓您專注於數據處理。
  • 如果您想使用C來處理服務器和客戶端之間的交互,那麼您可以使用一個CGI C庫,爲您完成許多HTTP苦差事。例如http://www.boutell.com/cgic/等。否則,Perl或PHP是一個不錯的選擇。
+0

你能幫我用哪個HTTP頭我需要這個嗎?我真的需要在沒有庫的情況下以C語言實現它。 – Sam 2011-06-10 20:45:24