![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Здравствуйте.
Есть программа, которая отсылает определённые данные пользователям по сети. Вот цикл рассылки Код:
Работаю с Linux socket по TCP. Правильно ли я понял, что это происходит из-за того, что выполнение цикла останавливается, до тех пор пока данные полностью не отправятся и пока не придёт подтверждение того, что данные дошли до пользователя? Сервер и пользователей запускал на локалхосте и такие задержки, а что же будет при работе с удаленными пользователями. Дайте пожалуйста совет, как быть? Спасибо за внимание. |
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Создавай отдельные потоки и в них отправляй. Все сервера работают только в отдельных потоках.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Есть такие понятия как non-blocking sockets и async I/O.
Кроме того полезно прочитать как работает select() и/или poll() |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Спасибо за помощь не блокирующие сокеты помогли. Есть ещё один вопрос. Так как я работаю на локалхосте, а не в интернете, все данные, которые я отправляю по сети доходят до получателя. А при работе в интернете они могут и не дойти, хотя пользователь будет находится в сети. И что тогда произойдёт? Будет ли отправлен ещё один send самостоятельно или нужно сделать что-то типа этого
Код:
Код:
|
![]() |
![]() |
![]() |
#5 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
I'm learning to live...
|
||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Ясно, спасибо. Я надеюсь двух отправок будет достаточно.
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
В таком случае получатель должен быть готов получать данные дважды.
Кроме того, это прямо таки расхищение трафика. И, наконец, так же ненадежно - как пропали данные один раз, так могут пропасть дважды, просто это будет реже и когда будут баги, связанные с этим, у вас будет сильно болеть голова. |
![]() |
![]() |
![]() |
#8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Я то думал что send работающий по TCP, самостоятельно проверяет подтверждение о доставке, и возвращает количество отправленных байт в случае успеха и -1 в случае неудачи. Значит проверку дошли данные до пользователя или не дошли нужно организовывать самостоятельно=(
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
send() принимает данные в буфер, при наполнении буфера send перестанет принимать данные а буфер очистится, когда/если данные будут доставлены.
Если размер буфера нулевой будет ждать подтверждения на каждый блок данных, все будет медленно работать. Все сказанное выше остается в силе - если данные НЕ дойдут send НЕ будет их пересылать. Гарантию доставки могут дать только специализированные протоколы. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависание формы при отправке данных в интернет | NickForm | Общие вопросы Delphi | 4 | 06.12.2011 17:50 |
Потеря части данных при отправке через TSocket | Crystallon | Работа с сетью в Delphi | 7 | 02.10.2011 21:46 |
Ошибка 200 при отправке данных | )Игнат( | Работа с сетью в Delphi | 2 | 15.06.2011 19:43 |
ComboBox проблема при отправке данных | record222 | Общие вопросы Delphi | 1 | 31.03.2010 16:26 |
Формат передаваемых данных хабам локальной сети, при отправке личных сообщений из DC клиетов | docm | Общие вопросы .NET | 0 | 18.11.2008 15:33 |