Имя: Пароль:
1C
 
[Qt] Знатоки кута и С++¸ пните меня для разгону :) (организация классов)
0 bvn13
 
30.01.10
00:26
Ничего очень серьезного на настоящих ООП не писал, тут идея подвернулась, а я застопарился. поэтому прошу сабжануть маленько.

Хочу реализовать клиент-серверное приложение. Точнее, отдельно - сервер, отдельно - клиент.

Сервер.
1) Ждет коннекта по порту1.
Когда есть коннект делает авторизацию.
Если авторизация пройдена, то присваивает этому клиенту ИД.
2) Ждет коннекта по порту2
когда есть коннект,то спрашивает ИД.
если ИД получен и он есть в списке ИД для ожидания, то все ОК. иначе - полный отвал

при "Все ОК", сервер посылает данные по порту1, принимает данные от клиента по порту 2.

Клиент - соответственно все наоборот с точностью до нормальной реакции сервера.

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

Подскажите идею, плз.
1 Fragster
 
гуру
30.01.10
00:30
блин, а что, через 1 порт в обе стороны слать не судьба?
2 bvn13
 
30.01.10
00:31
(1) видать, не судьба, ибо эти потоки никак не синхронизированы должны быть
3 b_ru
 
30.01.10
00:32
4 Лефмихалыч
 
30.01.10
00:33
(0) а разве иерархия классов на этапе проектирования как-то зависит от платформы?
5 Fragster
 
гуру
30.01.10
00:34
(2) дык и что?
6 bvn13
 
30.01.10
00:36
(5) тогда не пойму...
(4) хм... платформа выбрана изначально. (так проще понимать мне)
(3) ты меня сразу хочешь убить? я в этом не бельмес... хех :(
7 bvn13
 
30.01.10
00:43
сервер. думается так... начало.

class server {

   struct s_serverinfo {
       QTcpServer *tcpServer;
       QTcpSocket *tcpClient;
       QTcpSocket *tcpServerConnection;
       int bytesToWrite;
       int bytesWritten;
       int bytesReceived;
   } in, out; //это для входящего-исходящего потока данных

   QList<QString> clientQueue; //это очередь с ИД клиентов (для проверки при коннекте по порту2

}


а вот дальше - затык. понимаю, что нужно будет отдельные thread-ы делать для постоянного слушания портов и каждого клиента... но что-то это не вяжется в единую структуру
8 bvn13
 
30.01.10
00:45
если это важно, то Qt 4.6.0
9 trdm
 
30.01.10
01:45
(8) лично мне пофигу.
10 trdm
 
30.01.10
01:47
А если сорцы ngix покурить или на хабре пару статей почитать не прийдет понимание? или мумуки творчества замумучали?
11 Torquader
 
30.01.10
15:18
А чем мешает общение через один порт - если есть что читать, то читаем, а если есть что передать, то передаём - сокет же двунаправленный и ему нет разницы, что ушло в одну сторону, а что в другую.
Насколько я помню, есть такие "неблокирующие сокеты", которые позволяют вызывать чтение, не прерывая основного потока.
Несколько потоков будет нужно или для отработки длинных действий или для работы с несколькими клиентами.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший