我正在創建一個用C++編寫的簡單Unix服務器,它簡單地等待傳入連接,然後當連接建立時,它將請求的數據發送回客戶端的瀏覽器被顯示。除了將數據發送到客戶端外,我有一切工作。這是它應該如何工作:Unix C++簡單的服務器問題:將數據發送回瀏覽器
我啓動服務器並設置端口號(在這個例子中,我將使用8181)。
客戶端打開瀏覽器並連接到位於http://server.mysite.com:8181/test.txt的服務器,並嘗試檢索test.txt進行查看。
服務器接受傳入連接。它檢查文件是否存在。如果文件存在,它將文件發送到瀏覽器進行查看。
我的問題是,我不知道如何將數據發送回瀏覽器進行查看。我正在嘗試使用Unix系統調用來實現這一點,因爲我相信這就是恢復數據所需的全部內容。
現在我所做的只是將文件從文件讀入char數組緩衝區,然後將其寫入write(socketID,buffer,strlen(buffer))命令。當我測試它時,服務器正確地找到該文件並將數據讀入char數組緩衝區,但write()命令每次都返回-1錯誤值。
我想讓它到達瀏覽器連接的位置,然後能夠在瀏覽器中查看text.txt以及瀏覽器支持的圖片格式。
是否有一些方法可以解決「讀入緩衝區,然後將該緩衝區寫入套接字」部分,並以某種方式直接將文件發送到瀏覽器?這是我正在使用的代碼的一部分。我剛剛在代碼的其他部分發表了評論。
//create and bind socket. call listen()...
conn_socket = accept(socketInt, (struct sockaddr *)&caddr, (socklen_t *) &caddrLength);
recvInt = recv(conn_socket, requestedFileBuffer, 1023, 0);
if(recvInt > 0){
//checks to see that the requestd file exists and correctly
//reads that file into char array "buffer"
int writeInt = write(recvInt, buffer, strlen(buffer));//This is not working
cout << "writeInt is: " << writeInt << endl;// returns -1
}//end if
任何人有任何建議嗎?如果你需要我發佈更多的代碼,我會很樂意這樣做,但我相信問題在於上面的代碼。
謝謝你的時間。
你讀過Beej的網絡編程指南嗎? http://beej.us/guide/bgnet/ – 2009-12-04 20:59:37