2012-03-08 135 views
0

當客戶端請求時,我需要通過套接字連接發送一個txt文件。問題是我無法計算如何從二進制格式轉換爲ASCII。使用此代碼,客戶端只能接收垃圾字符。通過套接字C++流式傳輸.txt

ifstream file; 
char output [logfilesize]; 

file.open("log.txt"); 

file >> output; 
send(socket, output, sizeof(output), 0); 
cout << output << endl; 

file.close 

對不起,如果問題已被多次詢問,但在閱讀所有文章後,我無法確定如何使其工作。

謝謝!


編輯:工作代碼!

int lenght; 
char * logf; 
ifstream file; 

file.open("log.txt"); 
file.seekg(0, ios::end); 
lenght = file.tellg(); 
file.seekg(0, ios::beg); 
logf = new char [lenght]; 
file.read(logf, lenght); 
file.close(); 

cout.write (logf, lenght); 
send(soc,logf , lenght, 0); 
delete[] logf; 

回答

2

sizeof(output)將返回聲明,而不是你通過流運算符讀取的字符數的原始數組的大小。如果您知道文件是文本(即您想要讀取單個分隔字符串),則只能使用文件流中的運算符流。否則,您應該通過read()調用從流中讀取所需的字節數。如果它是一個字符串,則使用strlen()函數來確定字符串的長度(注意:這對二進制數據不起作用)。

+0

謝謝你的非常有用的答案。不幸的是,我仍然遇到了send()問題客戶端只接收文檔的第一個字符。 – 01BTC10 2012-03-08 10:14:13

+0

我將新代碼添加到了我的第一篇文章中。 – 01BTC10 2012-03-08 10:15:13

+0

@ user38586,很難說不知道客戶端代碼是什麼樣的。 – Nim 2012-03-08 11:11:48