Главная страница
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.02 c
3-1206952402
harisma
2008-03-31 12:33
2008.09.28
Использование метода Locate у TClientDataSet


2-1219215836
ReYo
2008-08-20 11:03
2008.09.28
Как узнать какое windows - окно активно?


15-1218105060
Пробежал...
2008-08-07 14:31
2008.09.28
Нет отличия INADDR_NONE от INADDR_BROADCAST ;(


15-1218192877
axis_of_evil
2008-08-08 14:54
2008.09.28
принимайте дипломированного лопуха


8-1186337227
DelphiKettle
2007-08-05 22:07
2008.09.28
Audio Tools Library