![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
Всем доброго времени суток! Есть код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Ну да. Если ты вызываешь recv на блокирующем сокете, когда там уже нет данных - он не вернет 0, как предполагает твой код, а будет ждать, пока данные не появятся. Потому выполнение никогда и не доходит до конца цикла.
Правильный способ - определять по самим полученным данным, когда заканчивается запрос, и не делать после этого лишний recv. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
Son Of Pain, а каким образом это определять?
|
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Скажу как я делаю: Передаю первыми четырьмя байтами длину передаваемого массива.
Потом в цикле читаю recv-ом, пока кол-во прочтенного не станет равным этому числу. Так я знаю когда нужно останавливать чтение. Ну а в твоем случае нужны неблокирующие сокеты, раз это НТТР сервер для всех ![]() P.S. Могу показать класс сервера на сокетах, который я для себя писал.
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Если это запрос get, например - конец можно определить по пустой строке после заголовков.
Если post - там будет поле content-length, из которого можно взять длину данных. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
Stilet, с неблокирующим сокетом уже пробовал - безрезультативно. Как-то странно ведет себя сервер (то принимает все, либо принимает часть). За пример был бы признателен =) Son Of Pain, соглашусь с Вами, как альтернатива может решить вопрос.
|
![]() |
![]() |
![]() |
#7 | |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]() Цитата:
К тому же в данной ситуации неблокирующий сокет не даст абсолютно никакого преимущества. Сейчас ты делаешь recv в цикле, а так будешь делать select + recv; и в обоих случаях должен будешь смотреть на полученные данные, чтобы понять, когда нужно остановиться. |
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
тебе обязательно на чистом API?
тут на TServerSocket http://www.programmersforum.ru/showthread.php?t=217802
Не стесняемся, плюсуем!
![]() |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
Son Of Pain, благодарю. Учту это. Slym, TServerSocket тоже порой "тупит" - с неблокирующим режимом тоже не все хорошо
|
![]() |
![]() |
![]() |
#10 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
В аттаче сервер и всякая всячина Приемер заюза: Код:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Winsock Client Server | fucil | Работа с сетью в Delphi | 10 | 06.09.2012 00:37 |
считывание фала с http (winsock) | bananasus | C/C++ Сетевое программирование | 10 | 20.11.2011 16:56 |
http server,http сервер, проблемы с post реализация на java | snajper_ro | Общие вопросы по Java, Java SE, Kotlin | 1 | 23.10.2011 14:25 |
Winsock и http | Armatus | Win Api | 10 | 06.04.2011 01:25 |
Winsock http-запросы | SmartCream | Работа с сетью в Delphi | 5 | 14.03.2011 15:34 |