crossplatform.ru

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

> Несколько QTcpServer на одном порте
borune
  опции профиля:
сообщение 15.10.2013, 12:54
Сообщение #1


Участник
**

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

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




Репутация:   0  


Ребят, такой вопрос.

Вот есть, например, некая многопоточная сетевая программа, выполняющаяся на всех сетевых машинах. Каждый поток отвечает за сетевое взаимодействие с одним определенным узлом (т.е. число потоков равно числу узлов в сети - 1). В каждом потоке требуется организовать сокет для обмена данными между двумя машинами.

Вопрос в том, как это реализовать. У меня есть такая идея. Сделать в потоке сервер, который будет слушать нужный порт. Когда кто-то в этот порт стучится, обработчик сигнала QTcpServer::newConnection() создает сокет и анализирует его peerAddress. Если он совпадает с адресом той машины, за обмен с которой отвечает данный поток, то по созданному сокету начинается передача данных. В ином случае сокет должен быть передан "дальше", т.е. он должен будет попасть в другой поток, из него в следующий, и так далее, до тех пор, пока не дойдет до нужного потока.

Ввот как передать созданный сокет в другой поток?

Если кто не очень понял о чем речь, то тот же вопрос можно перефразировать так: если имеются несколько объектов QTcpServer, которые слушают один и тот же порт, то все ли эти объекты будут имитировать сигнал newConnection() при подключении кого-то в этому порту, и смогу ли я при помощи метода QTcpServer::nextPendingConnection() получить доступ к сокету и работать с ним в каждом из потоков?

Сообщение отредактировал borune - 15.10.2013, 13:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 15.10.2013, 13:35
Сообщение #2


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

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

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




Репутация:   34  


borune, ты ощущаешь разницу между слушающим сокетом и клиентским сокетом ? Link

слушающий сокет (сервер) создаётся системой и прикрепляется к порту (создать второй сокет на этом порту уже нельзя)

соответственно, второй сервер на таком же порту, как и первый сервер, не создастся и сигналов (в рамках Qt) о подключении клиента, само собой, слать не сможет

Сообщение отредактировал Алексей1153 - 15.10.2013, 13:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 15.10.2013, 14:32
Сообщение #3


Участник
**

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

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




Репутация:   0  


Цитата(Алексей1153 @ 15.10.2013, 14:35) Link
borune, ты ощущаешь разницу между слушающим сокетом и клиентским сокетом ? Link

слушающий сокет (сервер) создаётся системой и прикрепляется к порту (создать второй сокет на этом порту уже нельзя)

соответственно, второй сервер на таком же порту, как и первый сервер, не создастся и сигналов (в рамках Qt) о подключении клиента, само собой, слать не сможет


Я не знаю что такое слушающий сокет, я создаю сервер, который слушает порт. Если к серверу кто-то подключается - то в этом случае создается сокет при помощи метода QTcpServer::nextPendingConnection().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 14.12.2025, 17:40