![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача данных с использованием WinSock [XP]
Alral © (2008-08-19 20:26:00)Здравствуйте.
У меня такая проблема: пытаюсь написать простой тестовый HTTP-сервер с использованием WinSock. Для передачи данных (HTML-код) использую функцию recv. В качестве буфера отправки использую массив типа Char.
Сервер работает следующим образом:
1. Принимает данные от браузера и записавает их в TMemo.
2. Отправляет HTML-код.
3. Завершает соединение.
Проблема состоит в следующем:
При отправке HTML - кода одной строкой, на этапе разработке присвоенной буферу (SendBuf:='<HTML><HEAD>...'), всё работает нормально.
При отправке HTML кода, разбитого на строки, также присвоенный напрямую буферу на этапе разработки (SendBuf:='<HTML>'; Send(...); SendBuf:='<HEAD>'); Send(...);) теги отображаются браузером нормально, но строки только с текстом помимо текста заполнены нечитаемыми символами.
При попытке загрузить данные, содержащиеся в переменной String, в буфер простым присваиванием каждого символа, равно как и при попытке использовать в качестве буфера переменную типа String, Mozilla Firefox предлагает начать скачивание файла, IE не может отобразить страницу. Есть подозрение, что способ хранения данных в Array of Char отличается от способа хранения в String. Тогда требуется нормальная функция для перевода. В справке ничего не нашёл.
Как можно решить данные проблемы?
Спасибо.
С уважением, Александр
Alral (2008-08-20 00:03:00) [1]Простите, Send, конечно.
Просто до этого разбирался с ошибкой, которую выдавала функция recv.
Сергей М. (2008-08-19 22:09:00) [2]
> Для передачиданных (HTML-код) использую функцию recv
Ну ты и чебурек)
recv (от англ. receive) - принять, а не передать.
Alral (2008-08-19 21:23:00) [3]Извиняюсь, использовал SizeOf вместо Length (забыл изменить). Теперь всё работает.
Спасибо.
С уважением. Александр.
DVM (2008-08-19 21:17:00) [4]
> IE пишет, что файл требует какой-то программы, которая не
> установлена
ты, надеюсь, передаешь не сразу HTML, а предварительно заголовок HTTP?
DVM (2008-08-19 21:15:00) [5]
> Пытаюсь.
Показывай как пытаешься
Alral (2008-08-19 21:04:00) [6]
> send() позволяет прекрасно отправлять и строки типа string.
Пытаюсь.Firefox предлагает начать скачивание файла, как HTML - код он полученную строку не распознаёт. IE пишет, что файл требует какой-то программы, которая не установлена. При попытке получить данные другим клиентом, получаю лишь 3 нечитаемых символа.
DVM (2008-08-19 20:55:00) [7]А "разбивка на строки" это так:
ARequest := 'бла бла бла' + #13#10 +
'бла бла бла' + #13#10 +
'бла бла бла';
DVM (2008-08-19 20:54:00) [8]Например, так:
var
ARequest: string;
ReturnCode := send(ASock, PChar(ARequest)^, Length(ARequest), 0);
DVM (2008-08-19 20:51:00) [9]
> При отправке HTML кода, разбитого на строки, также присвоенный
> напрямую буферу на этапе разработки (SendBuf:='<HTML>';
> Send(...); SendBuf:='<HEAD>'); Send(...);) теги отображаются
> браузером нормально, но строки только с текстом помимо текста
> заполнены нечитаемыми символами.
Во-первых, это не разбивка на строки, во-вторых нахрена ковыряться с массивом char, если не понимаешь что делаешь, и если send() позволяет прекрасно отправлять и строки типа string.