crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Вопросы по сокетам., Чтение/Запись в сокет..
Авварон
  опции профиля:
сообщение 27.4.2009, 21:33
Сообщение #21


Студент
*

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

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




Репутация:   0  


Цитата(blondinka @ 26.4.2009, 18:44) *
Аналогию с аськой проводила для того, чтобы показать, что вариант с классом менеджер подключений мне не подойдет.
Сервер писала тоже я, и могу сказать, что у меня авторизация требуется и accept() делается только для первого подключения, а второе висит в сокете до тех пор, пока первый не закроет свое подключение, тогда для второго делает accept() (сервер работает на селекте), т.е. сразу после accept в select уже передается дескриптор клиента и соответственно он работает уже с этим подключением. В Qt , как я поняла, определяется connect или нет, только по совпадению адреса сервера и порта.
Мне как разне нужно,чтобы двое заходили..Мне нужно:
Если это втрое или n-ное подключение, то опеделить это, т.е сотояние сокета, сделал ли мне сервер accept() (и принимает мои пакеты, и отвечае мне) или же это соединение висит в очереди ожидающих подключение. Сервер вообще трогать не надо..Надо в клиенте определить сделал ли мне сервер accept или нет.

менеджер подключений О_о в сервере: "accept() if(bool) close; else {bool = true; рабочий цикл; close; bool=false;}"
к серверу невозможно сделать 2 подключения, если он не хочет делать accept() в чем вообще проблема изменить чуть-чуть сервер? собственно accept и нужен для того, чтобы сервер мог установить соединение и передать отказ "лишнему" клиенту.
если настолько в лом переделывать сервер - делай тайм аут. если не ошибаюсь, то вызов connect блокирует приложение => до коннекта пускаем таймер по истечении которого, если мы не прошли коннект, рубим клиента
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 28.4.2009, 9:32
Сообщение #22


Студент
*

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

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




Репутация:   3  


Сервер хочет делать accept, но не видит второго подключения вообще до тех пор,пока первый не разорвет свое соединение, т.к в select передается дескриптор этгго первого подключения.
Connect приложение проходит, вопрос собственно состоял в том,есть ли функция в Qt, определяющая состояние сокета.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 28.4.2009, 10:30
Сообщение #23


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

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

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




Репутация:   40  


Глянь: QAbstractSocket::SocketState.
Пойдет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 28.4.2009, 13:10
Сообщение #24


Студент
*

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

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




Репутация:   3  


Угу, видела)
Только не могу найти что значит ListeningState...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fsMark
  опции профиля:
сообщение 28.4.2009, 14:02
Сообщение #25


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 23.4.2008
Из: г. Киров
Пользователь №: 155

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




Репутация:   1  


Цитата(blondinka @ 28.4.2009, 14:10) *
Угу, видела)
Только не могу найти что значит ListeningState...


ListeningState - состояние прослушивания.. то есть он слушает некоторый порт, ждет подключения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 28.4.2009, 14:10
Сообщение #26


Студент
*

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

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




Репутация:   3  


Ясно, значит, это тоже относится к серверу и не подойдет...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 28.4.2009, 14:50
Сообщение #27


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

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

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




Репутация:   40  


Как я понял, для твоего клиента тебе нужно проверять в каком состоянии находится сокет в QAbstractSocket::UnconnectedState или QAbstractSocket::ConnectedState. Если я не ошибаюсь, то состояние QAbstractSocket::ConnectedState должно быть после того, как сервер сделал accept, а это именно то, что тебе нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 28.4.2009, 15:43
Сообщение #28


Студент
*

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

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




Репутация:   3  


В том-то и дело, что он посылает сигнал connected(), когда хост найден и порт совпадает..а сделан ли accept() или нет, его мало волнует. Т.е. мой клиент хост находит порт совпадает и высылает мне этот сигнал, и соотвественно находится в состоянии QAbstractSocket::ConnectedState.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 16:24