Здравствуйте, гость ( Вход | Регистрация )
|
OrSOn |
16.2.2010, 14:47
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Всем добрый день! Столкнулся с довольно неприятной проблемой при работе с сокетами... Суть проблемы в следующем:
Имеется сервер и клиент, для общения используют сокеты. В некий момент времени клиент рушится (ну или связь падает, не суть важно), при этом сервер пытается что-то писать в сокет, что приводит к ошибке. Чтобы избежать этого, пробовал ввести проверку Так вот случаются ситуации, что проверка состояния проходит, а сразу после нее до начала проталкивания информации клиент падает и на tcpSocket->flush() снова вылетаю с ошибкой. Если кто сталкивался с подобным, подскажите, пожалуйста, как это можно обойти... Сообщение отредактировал OrSOn - 16.2.2010, 14:48 |
|
|
|
![]() |
|
OrSOn |
19.2.2010, 11:50
Сообщение
#2
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Да, что-то я тоже не заметил, спасибо, так работает)) Другое дело, что полный перенос сего кода в мой проект с целью проверки ни к чему не привел... Запускаю, а клиенту ничего не приходит (пока не напишу flush()). Причем если после вызова write() написать waitForBytesWritten(), то клиент получает сигнал readyRead(), но ему приходит только маленький кусок информации,а не все сразу. Может это быть связано с тем, что сервер передает через QThread со своим циклом событий? Увы, прислать файл не могу, ибо ограничения инета, закрыто добавление файлов. Но поток сделан так:
В конструкторе moveToThread( this ); А в функции run() одна функция exec() для создания собственного цикла. Далее работа потока идет чисто по сигналам... |
|
|
|
OrSOn Обрыв соединения QTcpSocket 16.2.2010, 14:47
sploid так в чем проблема? в том что сервер не знает запи... 16.2.2010, 17:29
SABROG Цитата(OrSOn @ 16.2.2010, 14:47) вылетаю ... 16.2.2010, 20:28
OrSOn Обработать ошибку нельзя - полностью прерывается д... 17.2.2010, 10:07
BRE Цитата(OrSOn @ 17.2.2010, 10:07) Обработа... 17.2.2010, 10:15
OrSOn while( tmpLength < file.size() ... 17.2.2010, 10:19
BRE Покажи как создается объект tcpSocket и какие сигн... 17.2.2010, 10:25
OrSOn Значит по порядку...
Объект создается нормально, н... 17.2.2010, 10:34
BRE Класс TcpSocket данные кеширует сам и отправляет и... 17.2.2010, 10:50
OrSOn Увы, но удаления объекта не происходит. Я уже дума... 17.2.2010, 11:02
BRE Ну так если ты хочешь отправлять синхронно, то поп... 17.2.2010, 11:39
OrSOn Боюсь, что так будет не лучше, ибо сложнее отследи... 17.2.2010, 11:45
BRE Как только ты записал последний кусок данных в сок... 17.2.2010, 12:11
OrSOn Попробовал, ничего не вышло... Вот код:
while... 17.2.2010, 14:50
BRE Набросал небольшой пример (клиент/сервер) для пере... 17.2.2010, 16:29
OrSOn Спасибо, сейчас гляну
Что-то я не совсем понял...... 17.2.2010, 17:12
BRE Цитата(OrSOn @ 17.2.2010, 17:12) int writ... 17.2.2010, 17:23
OrSOn Попробовал, но, увы, этот вариант врядли прокатит(... 18.2.2010, 13:15
BRE Цитата(OrSOn @ 18.2.2010, 13:15) Получает... 18.2.2010, 14:33
OrSOn ну не знаю, я запускал в дебаге твой пример, так т... 18.2.2010, 14:35
BRE Цитата(OrSOn @ 18.2.2010, 14:35) ну не зн... 18.2.2010, 18:53
BRE Покажи подробно (закопипасть сюда) класс этого пот... 19.2.2010, 11:59
OrSOn Ну все будет сложно сюда перенести, ибо много, я к... 19.2.2010, 12:15
SABROG connect( this, SIGNAL( readF() ... 19.2.2010, 12:25
OrSOn Сокет принадлежит главному потоку, объект NThread ... 19.2.2010, 12:31
SABROG Это не правильно. Соединение не должно быть прямым... 19.2.2010, 13:01
OrSOn У меня и так эта проверка стоит, согласен, можно у... 19.2.2010, 13:02
BRE Сокет принадлежит главному потоку, а должен принад... 19.2.2010, 13:12
SABROG Смотри что получается. Сокет находится в гуишном п... 19.2.2010, 13:19
OrSOn Изначально так и планировалось, чтобы на 1 запрос ... 19.2.2010, 13:26
SABROG Задача потока выполнять долгую операцию на фоне по... 19.2.2010, 13:45
OrSOn Вот я и думал об этом как раз, чтобы обрабатывающи... 19.2.2010, 13:48
BRE OrSOn, я скоро приеду домой и сброшу тебе пример а... 19.2.2010, 14:03
OrSOn Ок, спасибо, буду ждать) 19.2.2010, 14:05
SABROG Думаю вместо того, чтобы данные передавать с сигна... 19.2.2010, 14:37
BRE Цитата(SABROG @ 19.2.2010, 14:37) Думаю в... 19.2.2010, 15:06
SABROG Цитата(BRE @ 19.2.2010, 15:06) А если при... 19.2.2010, 16:19
BRE Цитата(SABROG @ 19.2.2010, 16:19) В общем... 19.2.2010, 16:53
OrSOn Спасибо, сейчас буду пробовать все посоветованное.... 24.2.2010, 10:30
OrSOn А такой вопрос еще... А можно ли рассматривать как... 24.2.2010, 16:10
SABROG Цитата(OrSOn @ 24.2.2010, 16:10) а затем ... 25.2.2010, 2:43
OrSOn А почему это я не смогу вернуть их в главный поток... 25.2.2010, 9:47
BRE Пока я вижу один момент с перетягиванием объектов ... 25.2.2010, 12:14
OrSOn Увы, при перемещении я не могу рвать коннект, в то... 25.2.2010, 12:44![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 7.1.2026, 12:36 |