Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача данных с использованием 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо