Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1219302166
Fynjy
2008-08-21 11:02
2008.09.28
использовать IBQuery в разных юнитах


2-1219067770
silver222
2008-08-18 17:56
2008.09.28
FindFirst


15-1217924854
pasha_golub
2008-08-05 12:27
2008.09.28
PHP: вывод перенаправить в файл.


15-1208159604
Костик
2008-04-14 11:53
2008.09.28
.net или нет?


2-1218999520
Lamer666
2008-08-17 22:58
2008.09.28
MD5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский