Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизПередача данных с использованием WinSock Найти похожие ветки
← →
Alral © (2008-08-19 20:26) [0]Здравствуйте.
У меня такая проблема: пытаюсь написать простой тестовый 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. Тогда требуется нормальная функция для перевода. В справке ничего не нашёл.
Как можно решить данные проблемы?
Спасибо.
С уважением, Александр
← →
DVM © (2008-08-19 20:51) [1]
> При отправке HTML кода, разбитого на строки, также присвоенный
> напрямую буферу на этапе разработки (SendBuf:="<HTML>";
> Send(...); SendBuf:="<HEAD>"); Send(...);) теги отображаются
> браузером нормально, но строки только с текстом помимо текста
> заполнены нечитаемыми символами.
Во-первых, это не разбивка на строки, во-вторых нахрена ковыряться с массивом char, если не понимаешь что делаешь, и если send() позволяет прекрасно отправлять и строки типа string.
← →
DVM © (2008-08-19 20:54) [2]Например, так:
var
ARequest: string;
ReturnCode := send(ASock, PChar(ARequest)^, Length(ARequest), 0);
← →
DVM © (2008-08-19 20:55) [3]А "разбивка на строки" это так:
ARequest := "бла бла бла" + #13#10 +
"бла бла бла" + #13#10 +
"бла бла бла";
← →
Alral © (2008-08-19 21:04) [4]
> send() позволяет прекрасно отправлять и строки типа string.
Пытаюсь.Firefox предлагает начать скачивание файла, как HTML - код он полученную строку не распознаёт. IE пишет, что файл требует какой-то программы, которая не установлена. При попытке получить данные другим клиентом, получаю лишь 3 нечитаемых символа.
← →
DVM © (2008-08-19 21:15) [5]
> Пытаюсь.
Показывай как пытаешься
← →
DVM © (2008-08-19 21:17) [6]
> IE пишет, что файл требует какой-то программы, которая не
> установлена
ты, надеюсь, передаешь не сразу HTML, а предварительно заголовок HTTP?
← →
Alral © (2008-08-19 21:23) [7]Извиняюсь, использовал SizeOf вместо Length (забыл изменить). Теперь всё работает.
Спасибо.
С уважением. Александр.
← →
Сергей М. © (2008-08-19 22:09) [8]
> Для передачи данных (HTML-код) использую функцию recv
Ну ты и чебурек)
recv (от англ. receive) - принять, а не передать.
← →
Alral © (2008-08-20 00:03) [9]Простите, Send, конечно.
Просто до этого разбирался с ошибкой, которую выдавала функция recv.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.061 c