Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

Передача данных с использованием 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1217963808
palva
2008-08-05 23:16
2008.09.28
Не о рычагах, а об электронах


15-1217906934
Slider007
2008-08-05 07:28
2008.09.28
С днем рождения ! 5 августа 2008 вторник


2-1219127174
Demo_nik
2008-08-19 10:26
2008.09.28
сумма поля


15-1217935394
data
2008-08-05 15:23
2008.09.28
Посоветуйте цифровую видеокамеру.


2-1218827240
a2618
2008-08-15 23:07
2008.09.28
Компонент МЕМО