Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
10 / 9 / 5
Регистрация: 26.02.2011
Сообщений: 150
1

Асинхронные сокеты. Работа из нескольких окон

30.06.2011, 14:21. Показов 1462. Ответов 1
Метки нет (Все метки)

Есть клиент и есть сервер.
Примеры
Написаны по примерам которые можно найти здесь и здесь соответственно.

При запуске, клиент в начале предлагает авторизироваться. Потом если авторизация прошла успешно, окно с авторизацией закрывается и открывается окно с основным телом программы.
У клиента есть класс который отвечает за работу с сервером (соединение, отправка/получение сообщений). В окне с авторизацией создаю экземпляр этого класса:
C#
1
2
3
Client Cl = new Client();
Cl.ConnectAsync(ServerIP, port); //цепляемся к серверу
Cl.SendAsync("Hello"); //отправляем сообщение
На форме с авторизацией все работает хорошо.
Когда авторизация прошла успешно, форма с авторизацией закрывается и открывается основная форма. Там по той же схеме создаю экземпляр класса, так же цепляюсь и отправляю сообщение. Но сервер сообщение не получает.
Собственно и вопрос: в чем проблема? Перед закрытием окна с авторизацией нужно как-то порвать соединение? Сокеты позакрывать для нового соединения (из основной формы)? Может как-то можно сделать постоянное соединение которому без разницы с какой формы шлют команды на сервер?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2011, 14:21
Ответы с готовыми решениями:

Асинхронные сокеты
Здравствуйте. Очень нужна ваша помощь. Вот callback функция которая передается в метод асинхронного...

Асинхронные сокеты
Создаю асинхронный сокет. Выполняю вызов WSASend, указываю WSAOVERLAPPED структуру с событием. Но...

C++ Асинхронные сокеты
Дайте ссылку на хороший гайд по асинхронным сокетам. Везде используются синхронные.

Асинхронные сокеты Windows
Здравствуйте, форумчане! Интересует вопрос как можно синхронно отправить сообщение через...

1
15 / 15 / 5
Регистрация: 21.04.2010
Сообщений: 85
30.06.2011, 22:46 2
Думаю что решение проблемы состоит в том, чтобы не создавать подключение в каждом окне, а использовать одно подключение для всех окон.
Вариантов решения здесь несколько:
1. Создать класс подключения, который будет содержать статическое поле. Что-то вроде этого:
C#
1
2
3
4
5
6
7
8
9
10
11
class ClientConnection
{
    // ....
    public static Client{get;set;};
    
    ClientConnection()
    {
        Client = new Client();
    }
    // ....
}
2. Создать этот объект в классе главного окна программы и передать ссылку в конструктор формы авторизации.

Я сейчас пишу подобную программу и использую именно первый способ. Он лучше тем, что к этому объекту можно обратиться из любого класса. Второй вариант менее гибкий.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2011, 22:46

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Асинхронные сокеты или потоки ?
Ребят qq, что лучше подойдёт: асинхронные сокеты или потоки ? Если, 1) игровой сервер ( менее 10...

Клиент + Сервер, асинхронные сокеты
Привет! Пишу клиент серверное приложение на основе асинхронных сокетов. Цель передача картинки....

Асинхронные запросы или сокеты?
Добрый день. Нужен ваш совет. Начну с того что данные я вывожу из БД асинхронно. Но тут дело...

Асинхронные сокеты , ф-я WSAAsyncSelect и ее применение
Доброго времени суток , возникла проблема с асинхронностью сокетов , а именно функцией...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.