Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 13.03.2016, 10:26   #1
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию Сетевое асинхронное приложение. C#

Сервер зависает вот на этой строке:
Код:

var msg = await clientView.ReadChatMessageAsync();

До нее все доходит и посылается проверено отладчиком. Весь код не хочу тут приводить, да он и не влезет (кажется тут лимит на символы), но ReadChatMessageAsync описана так, если надо:
Код:

public Task<ChatMessage> ReadChatMessageAsync()
{
	return new Task<ChatMessage>(() => ChatMessage.Deserialize(Stream));
}

Помогите пожалуйста! Никак не пойму в чем проблема, клиент точно посылает сообщение, но оно судя по всему не доходит

Последний раз редактировалось I_Enjoy_C#; 13.03.2016 в 10:29.
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 13:29   #2
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

На коленке набросал консольный синхронный листенер в несколько строк. Он все принимает отлично. Значит клиент данные точно выслал, а вот асинхронный тупит

Последний раз редактировалось I_Enjoy_C#; 13.03.2016 в 13:41.
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 13:45   #3
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

Я вообще недавно только разобрался со всей этой асинхронностью и мог напортачить конкретно с ней. У меня подозрение что что то там не так... Вот еще код десериализатора. Используется XmlSerializer (данные в xml передаю) и NetworkStream.
Код:

public Task<ChatMessage> ReadChatMessageAsync()
{
	return new Task<ChatMessage>(() => ChatMessage.Deserialize(Stream));
}

public static ChatMessage Deserialize(Stream stream)
{
	return Serializer.Deserialize(stream) as ChatMessage;
}

I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 13:53   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,124
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Ну как минимум надо использовать Task.Factory.StartNew или Task.Run вместо просто new.
Alex11223 на форуме   Ответить с цитированием
Старый 13.03.2016, 13:58   #5
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну как минимум надо использовать Task.Factory.StartNew или Task.Run вместо просто new.
Это почему же? По моему так тоже должно канать. Просто у этих методов них нету нужных делегатов, они есть только в конструкторе
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 14:04   #6
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,124
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Как это нет? Все есть, что именно вам от конструктора надо?
Alex11223 на форуме   Ответить с цитированием
Старый 13.03.2016, 14:25   #7
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

А да, действительно есть, почему то раньше их не замечал. Но все равно не помогло что то... Не доходят сообщения
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 14:28   #8
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

Точнее даже так: сообщение приходит только когда клиент дисконнектится, совершенно случайно заметил.
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 16:38   #9
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

Дальше еще интереснее!!! Все в тот же написанный на коленке синхронный листенер я добавил все эти ChatMessage и ClientView и попробовал запустить все (в том числе и десериализацию) синхронно. Так вот абсолютно та же фигня - все повисает на десериализации XmlSerializer-ом сообщения из NetworkStream. Почему так происходит? Причем если я просто из этого потока считываю буфер как байты, потом перекидываю в MemoryStream и уже из него десериализовываю - то все работает нормально. А вот из NetworkStream-а хоть убей не хочет десериализовывать. При том сериализовывает в него (на стороне клиента) он нормально...

Хотя самым интересным по прежнему остается вот это!
Цитата:
Сообщение от I_Enjoy_C# Посмотреть сообщение
Точнее даже так: сообщение приходит только когда клиент дисконнектится, совершенно случайно заметил.

Последний раз редактировалось I_Enjoy_C#; 13.03.2016 в 16:41.
I_Enjoy_C# вне форума   Ответить с цитированием
Старый 13.03.2016, 16:45   #10
I_Enjoy_C#
Новичок
 
Регистрация: 13.03.2016
Сообщений: 9
Репутация: 10
По умолчанию

У меня есть единственное подозрение. Когда я работал с StreamWriter, то чтобы нормально работало надо было у него AutoFlush в true устанавливать чтобы он сбрасывал данные сразу же. Может ли тут быть та же фигня? У NetworkStream нет свойства AutoFlush, но есть метод Flush. Причем не ясно делает ли он что то, т.к. в комментах студии написано "Этот метод зарезервирован для использования в будущем.". Да и вроде попробовал его вызывать, ничего не дает...
I_Enjoy_C# вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большой проект (чтение com, БД, картография) - сетевое приложение для windows tarakan1983 Фриланс 25 14.01.2015 21:34
Сетевое приложение (Клиент-сервер) Unique Работа с сетью в Delphi 9 10.05.2012 22:01
сетевое приложение на J2ME TitanicMan Общие вопросы по Java, Java SE, Kotlin 1 08.01.2010 04:33
Сетевое приложение для удаленного запуска программ. Ветас Работа с сетью в Delphi 2 11.11.2007 10:19


19:39.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru