Создание чата на несколько человек
И ещё: backgroundworker же обеспечивает синхронизацию потоков? То есть можно же в потоке будет использовать переменные этого класса, объявленные вне этого потока?
Есть более простой выход - рассылка по UDP (broadcast)! Не могу сказать как это будет на .NET но на winsock просто:
1. Создаём сокет.
2. Связываем (bind) с адресом Any( 0.0.0.0 ) и требуемым портом!
// Это необходимо для приёма сообщений от всех клиентов на данном порте!
3. Запускаем бесконечный цикл, в котором принимаем сообщения на с указанного порта и выводим их в поле текста!!!
4. А сами отправляем сообщения на адрес Broadcast (255.255.255.255), но учтите - при использовании winsock требуется включить вручную возможность рассылки (по-умолчанию она отключена):
/* <CODE> */
bool isBcast = true;
setsockopt( ВАШ_СОКЕТ, SOL_SOCKET, SO_BROADCAST, (const char*) &isBcast, sizeof(isBcast) );
/* </CODE> */
Ну а на Qt ещё проще, а главное красиво - создает впечатление правильности! Если интересует могу написать!
З.Ы. А можно сообщением посылать не текст, а например, какой нить массив значений int?
Есть более правильный выход - использовать порты завершения и, соотв-но, асинхронные сокеты.
Тогда не надо создавать кол-во потоков равное кол-ву соединений.
В native-коде порты завершения создаются с помощью CreateIoCompletionPort.
В .NET аналогом, наверное, будет BeginSend/EndSend, BeginReceive/EndReceive.
З.Ы. Для соединения ведь все равно, какой порт использовать(пробовал и 80, и любые другие)?
З.Ы. Для соединения ведь все равно, какой порт использовать(пробовал и 80, и любые другие)?
ну, главное, чтоб клиент коннектился к тому порту, на котором сервер висит, и , чтоб порт не был занят кем-то другим.