Потоковая передача .txt через сокет c ++ - PullRequest
0 голосов
/ 08 марта 2012

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

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;

1 Ответ

2 голосов
/ 08 марта 2012

Это sizeof(output) вернет размер исходного массива, который вы объявили, а не количество символов, которые вы прочитали с помощью оператора потока.Вы можете использовать поток в операторе из файлового потока только в том случае, если вы знаете, что файл является текстовым (т.е. вы хотите прочитать одну строку с разделителями).В противном случае вы должны прочитать необходимое количество байтов из потока через вызовы read().Если это строка, используйте функцию strlen() для определения длины строки (ПРИМЕЧАНИЕ: это не будет работать для двоичных данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...