Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Cетевое программирование на C#.

489
14 июля 2009 года
NeO_u
277 / / 11.10.2006
Добрый день.
Появилась проблема:
Есть сервер - многопоточный, обрабатывает кучу клиентов, все работает корректно. Каждый новый клиент - отдельный поток. все обрабатывается, клиентам ответы посылаются.

А вот с клиентов вознилка проблема.
1) Как правильно реализовать прием пакета, при условии, прием пакета, может происходит без предварительного запроса? Т.е., например, один из клиентов что-то изменил, отправил это изменение на сервер, а сервер в свою очередь рассылает всем клиентам это изменение.
2) Так же, возможно ситуация, когда клиент отпраляет запрос и ожидает ответа от сервера

Я думал, что прием сообщений надо сделать в отдельном потоке...но, тогда, каким образом ответ от сервера, во 2м случае.
Так же, возникает проблема, как отслеживать, например, загрузку информации, когда приходит от сервера 600-800 ответов на один запрос...

Подскажите, как это все реализовать или где можно почитать про реализацию такого плана приложений. Спасибо.
241
16 июля 2009 года
Sanila_san
1.6K / / 07.06.2005
По сетевому программированию есть замечательная книга Винода Кумара. У меня где-то валялись примеры из неё, но их и в Инете найти можно.

По сабджу:
1. Как у вас реализована работа с сетью на сервере?
2. Как реализована работа с сетью на клиенте?
3. Непонятно, что имелось в виду под "как отслеживать, например, загрузку информации, когда приходит от сервера 600-800 ответов на один запрос." Нагрузка в запросах в секунду или в сутки?:)

Короче, опишите подробнее, как у вас что сделано и тогда проблема станет яснее.
489
17 июля 2009 года
NeO_u
277 / / 11.10.2006
Спасибо. С этим уже разобрался. Реализовал все через .NET remoting

Теперь возникла другая проблема:
Есть интерфейс:
 
Код:
public interface IAMRemoting
    {
        event ArticleChanged OnArticleChanged;
        event CategoryChanged OnCategoryChanged;

        bool GetImage(Image image);
        int SetImage(Image image);
        void DeleteImage(Image image);
}


Есть серверная реализация этого интерфейса:

Код:
public event ArticleChanged OnArticleChanged

    public bool GetImage(Image image)
        {
            return true;
        }

        public int SetImage(Image image)
        {
            if(OnArticleChanged != null)
               OnArticleChanged(article, Operation.Add);
        }

        public void DeleteImage(Image image)
        {
            if(OnArticleChanged != null)
               OnArticleChanged(article, Operation.Delete);
        }


На клиенте получаю этот класс, через (IAMRemoting)Activator.GetObject(typeof(IAMRemoting), String.Format("{0}/{1}",uri,"AMRemoteFunctions"));

Все работает отлично. Пока я не пытаюсь присвоить евенту какое-то событие.
Как только я присваиваю евенту событие, вылетает ошибка:
Exception has been thrown by the target of an invocation.

Event сам по себе является Сериализуемым.
И класс, в котором хранятся клиентские евенты, тоже сериализуем и MarshalByRefObject.

Вроде должно работать, а нет:-(

В чем может быть проблема?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог