crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Куда теряются пакеты ? QTcpServer QTcpClient, блокирующие сокеты
Litkevich Yuriy
  опции профиля:
сообщение 15.7.2009, 19:53
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(pirks @ 15.7.2009, 23:34) *
Что за форум такой ... ёпт.
форум, как форум. Ты его, кстати, с платной техподдержкой не перепутал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.7.2009, 12:07
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


pirks,
а что разбираться то.
уже всё подсказали.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.7.2009, 19:03
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(pirks @ 15.7.2009, 20:34) *
что ??? никто незнает где ошибка ? толи все ленивые толи сами нихера не знают. Что за форум такой ... ёпт.
pirks, устное предупреждение, еще раз будут подобные выражения, будет БАН!

Тебе уже сказали в чем ошибка, а ты так и не ответил:
Цитата(ViGOur @ 6.7.2009, 22:03) *
Скажи, чем тот код, что ты привел отличается от того, что приведен тобой в начале?
Просто распиши словами приведенный тобой код.

Сообщение отредактировал ViGOur - 16.7.2009, 19:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pirks
  опции профиля:
сообщение 16.7.2009, 22:04
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 5.7.2009
Пользователь №: 876

Спасибо сказали: 1 раз(а)




Репутация:   0  


Я расписал же , слвами между прочим ) Русскими даже.

А насчёт тех потдержки, я ничего не перепутал.
Если понимаешь суть происходящего, этот так трудно ответить ? нафиг тогда форум нужен, если всем интересны лишь свои проблемы. Типа я всё знаю но никому не скажу(впадлу, лень, неохота ...).
Тут проблема не в алгоритме работы с протоколами, и сокетами. Есть некие моменты в кт, которые не отмечены в документации должным образом. Вот эти самые вещи по идеи должны знать люди сталкивавшиеся ранее с этим. и мне не нужно рассказывать про TCP IP, он не представляет особой сложности. по нему есть спецификация и много толстых книжек. А вот сеть в кт это неизвестный лес, документации минимум, примеры отвратительны. и самое то что народу пользующих её мало.
Помойму проще написать свой класс работы с сокетами, и потоками для создания пакетов, чем дождаться ответа от знающих.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 16.7.2009, 22:31
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


pirks, а есть какой-нибудь заголовок пакета? Хоть что-то (помимо длины) по которому можно определить, что это пакет? Я завтра могу выложить кусок программы работы с COM-портом, аналогия очень большая. Думаю, что чем-то поможет....

Да, кстати. Почему бы не читать побайтово? Пришел байт - прочли, дописали в пакет. Итак, пока не сформирован пакет. Как только сформирован - начали читать следующий.... Попробуйте так! Пусть не самый эффективный метод, но надежный!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.7.2009, 23:14
Сообщение #16


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(AD @ 16.7.2009, 23:31) *
Почему бы не читать побайтово? Пришел байт - прочли, дописали в пакет. Итак, пока не сформирован пакет. Как только сформирован - начали читать следующий.... Попробуйте так! Пусть не самый эффективный метод, но надежный!
При большах объемах будет очень и очень медленный прием данных. :)

Цитата(pirks @ 16.7.2009, 23:04) *
Я расписал же , слвами между прочим
Ты расписал поверхностно, а если бы расписал подробно, то думаю сам бы дошел, что проблемный кусок у тебя:
while ((newTcpSocket.bytesAvailable() >= blockSize) && (blockSize != 0))

Ключевое в твоей ошибке: читаем данные пока полученно данных больше или равно blockSize.

Допустим ты отправил 3 пакета по 1024 байт, значит у тебя blockSize == 1024.
Ты получил 1 пакет и начинаешь его читать по этому условию, но у тебя идет склейка 1 и 2 пакетов (тоесть 2048 байт) ты читаешь только первый пакет и успешно игнорируешь 2.

В принципе та же самая ситуация, что и была.
Где у тебя вычисление оставшего для получения blockSize? Где вычисления размера полученных байт (ты же можешь получить сразу несколько пакетов)? Нет. Потому ты и теряешь данные.

Цитата(pirks @ 6.7.2009, 21:29) *
При работе с обычными сокетами было всё отлично, всё доходило и быстро и надёжно. А тут (((((((
имхо - извратили QT сокеты своей обёрткой. К сожалению писать нужно именно на них.
Если бы ты хорошо знал тему сокетов, то не говорил бы, что что их извратили в Qt. Как я понял ты еще не работал с boost или ACE сокетами, вот там точно изврат, если досканально не знаешь основы работы с сокетами. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pirks
  опции профиля:
сообщение 21.7.2009, 22:24
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 5.7.2009
Пользователь №: 876

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(ViGOur @ 17.7.2009, 0:14) *
Цитата(AD @ 16.7.2009, 23:31) *
Почему бы не читать побайтово? Пришел байт - прочли, дописали в пакет. Итак, пока не сформирован пакет. Как только сформирован - начали читать следующий.... Попробуйте так! Пусть не самый эффективный метод, но надежный!
При большах объемах будет очень и очень медленный прием данных. :)

Цитата(pirks @ 16.7.2009, 23:04) *
Я расписал же , слвами между прочим
Ты расписал поверхностно, а если бы расписал подробно, то думаю сам бы дошел, что проблемный кусок у тебя:
while ((newTcpSocket.bytesAvailable() >= blockSize) && (blockSize != 0))
Ключевое в твоей ошибке: читаем данные пока полученно данных больше или равно blockSize.

Допустим ты отправил 3 пакета по 1024 байт, значит у тебя blockSize == 1024.
Ты получил 1 пакет и начинаешь его читать по этому условию, но у тебя идет склейка 1 и 2 пакетов (тоесть 2048 байт) ты читаешь только первый пакет и успешно игнорируешь 2.

В принципе та же самая ситуация, что и была.
Где у тебя вычисление оставшего для получения blockSize? Где вычисления размера полученных байт (ты же можешь получить сразу несколько пакетов)? Нет. Потому ты и теряешь данные.

Цитата(pirks @ 6.7.2009, 21:29) *
При работе с обычными сокетами было всё отлично, всё доходило и быстро и надёжно. А тут (((((((
имхо - извратили QT сокеты своей обёрткой. К сожалению писать нужно именно на них.
Если бы ты хорошо знал тему сокетов, то не говорил бы, что что их извратили в Qt. Как я понял ты еще не работал с boost или ACE сокетами, вот там точно изврат, если досканально не знаешь основы работы с сокетами. :)



Сокеты это сокеты беркли ) их я знаю. Это давным давно придуманная технология. Всё остальное эт обёртки. Они нужны только для упрощения и кросплатформенности.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 21.7.2009, 22:29
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


pirks, очень сложно помочь человеку, если он не слушает советы. Перечитай сообщения ViGOur(а), найди у себя в коде указанные узкие места и попробуй их переделать - возможно, и поможет! ;)

Сообщение отредактировал AD - 21.7.2009, 22:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 21.7.2009, 22:46
Сообщение #19


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(pirks @ 21.7.2009, 23:24) *
Сокеты это сокеты беркли ) их я знаю. Это давным давно придуманная технология. Всё остальное эт обёртки. Они нужны только для упрощения и кросплатформенности.
Если бы это было так, то не нужно было бы виндовый сокеты (WSA) скрещивать с BSD cокетами (беркли) с макросами ifdef UNIX и прочими. Хоть сокеты Windows и разработанный на основе сокетов Беркли, но частично. Чтобы убедиться в этом глянь кроссплатформенные реализации Boost (asio), ACE, POCO, Qt ...

Ты споришь не там где нужно, лучше прочти мой последний ответ тебе, я описал в чем проблемы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pirks
  опции профиля:
сообщение 22.7.2009, 6:14
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 5.7.2009
Пользователь №: 876

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(ViGOur @ 21.7.2009, 23:46) *
Цитата(pirks @ 21.7.2009, 23:24) *
Сокеты это сокеты беркли ) их я знаю. Это давным давно придуманная технология. Всё остальное эт обёртки. Они нужны только для упрощения и кросплатформенности.
Если бы это было так, то не нужно было бы виндовый сокеты (WSA) скрещивать с BSD cокетами (беркли) с макросами ifdef UNIX и прочими. Хоть сокеты Windows и разработанный на основе сокетов Беркли, но частично. Чтобы убедиться в этом глянь кроссплатформенные реализации Boost (asio), ACE, POCO, Qt ...

Ты споришь не там где нужно, лучше прочти мой последний ответ тебе, я описал в чем проблемы.


хм, сокеты виндовс..... да это в принципе они ничего сами не писали, взяли бсдишные и закрыли исходники! первая версия это один в один, за исключением инициализации, самого типа дескриптора да названия парочки структур )))
Мелкософт в принципе не способен сам придумать ничего нормального. всё покупают да переделывают.

>>pirks, очень сложно помочь человеку, если он не слушает советы. Перечитай сообщения ViGOur(а), найди у себя в коде указанные узкие места и попробуй их переделать - >>возможно, и поможет! ;)

я переделывал по разному, а узких мест по склейке пакеов я не вижу. Я проверяю пакеты на целостность и жду ) Не вижу траблы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 12:33