Название: Обработка старых сокетов Отправлено: Zizilk от Июль 29, 2010, 14:07 Не пойму как можно организовать обработку старых сокетов. ???
Пока удаётся при появлении нового сокета засовывать его декриптор в вектор. А вот как дальше организовать обработку не знаю( Пока думаю, что придётся организовывать два цикла Первый - бесконечный в котором идёт обработка данных. Второй вложенный, в котором пробегается по старым сокетам в векторе и обрабатывает полученные данные. ??? Но чуствую, что что-то я не понимаю, как всё организовать. Название: Re: Обработка старых сокетов Отправлено: kuzulis от Июль 29, 2010, 15:46 Цитировать Пока удаётся при появлении нового сокета засовывать его декриптор в вектор. Ненене.. Как вариант - засовывать указатель на вновь созданный объект сокет (не дескриптор сокета - а именно сокет!!!) например в QList<QTCPSocket *> . Цитировать А вот как дальше организовать обработку не знаю( Пока думаю, что придётся организовывать два цикла Первый - бесконечный в котором идёт обработка данных. Второй вложенный, в котором пробегается по старым сокетам в векторе и обрабатывает полученные данные. Непонимающий А в чем проблема конкретно то? У тебя есть к примеру (грубо) список QList<QTCPSocket *> с указателями на сокеты. Вот берешь нужный тебе указатель и делаешь с ним I/O! В чем загвоздка? Что вообще хочешь сделать? Код в студию! :) Да и "старых" сокетов в принципе не бывет. После получения сигнала disconnected() ты должен удалить сокет вообще. И вообще все зависит от того, какой стратегии ты придерживаешься.. Я ж тебе уже раньше писал об этом. Название: Re: Обработка старых сокетов Отправлено: Zizilk от Июль 29, 2010, 16:33 ну я так и делаю в принципе..
Код: std::vector<QTcpSocket*>onlineusers; Кода есть но немного, и в принципе мне за него немного стыдно :-[ Ну под старыми сокетами я подразумевал те которые уже есть в векторе.) А задача стоит чтобы сервер не требовалось после каждого диалога рвать соединение. А использовать уже занесёные в вектор сокеты. Щас пробую делать нечто вроде эхосервера, который бы конектился с клиентом написанным на PHP. Те клиент подключается к серверу, отправляет серверу сообщение, сервер возвращает его клиенту, и так продолжается пока клиент не отсоединится. При этом работаем с одним сокетом. Единственное пока удалось только подключать сервер. А как вот реализовать дальнейшую возможность общения через один сокет, когда будет несколько подключённых клиентов, не могу придумать. Щас вот ещё узнал про сигнал ReadyToRead может вместо циклов его использовать Название: Re: Обработка старых сокетов Отправлено: Zizilk от Июль 31, 2010, 00:09 Почти разобрался, делаю через ReadyToRead()
Но возникла проблема( Не могу добраться, до того, что передал мне клиент. Сокет открывается. в сокет записывается. Но при попытке вывести на печать выдаёт null Код: printf("Reciving\n"); Тут опущена закоменченная проверка на целостность блока И проверка кол-ва байт находящихся в сокете (приходит в сокет ровно столько сколько пришло из клиента, так что затык именно где-то в обработке сокета...) Я не знаю где ошибка( Название: Re: Обработка старых сокетов Отправлено: Lostinnet от Август 02, 2010, 15:58 попробуй использовать не указатель на Char, а QString. У меня все отлично работает
|