2012-03-08 3 views
0

Мне нужно отправить файл txt через соединение сокета по запросу клиента. Проблема в том, что я не могу понять, как преобразовать из двоичного формата в ASCII. С помощью этого кода клиент получает только нежелательные символы.Потоковая передача .txt через сокет C++

ifstream file; 
char output [logfilesize]; 

file.open("log.txt"); 

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

file.close 

Извините, если вопрос задан несколько раз, но после прочтения всего сообщения я не мог понять, как заставить его работать.

Thank's!


Редактировать: Рабочий код!

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

+0

Я добавил новый код в свой первый пост. – 01BTC10

+0

@ user38586, трудно сказать, не зная, как выглядит код клиента. – Nim

Смежные вопросы