Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Асинхронное чтение NetworkStream, IOException 
:(
    Опции темы
Felixx
Дата 14.9.2013, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Привет всем, помогите разобраться  с ошибкой плз. Я столкнулся с такой проблемой:

при вызове: 
Код

 rs = _stream.EndRead(result);


Возникает ошибка : System.IO.IOException: Не удается прочитать данные из транспортного соединения
Самое интересное, что у другова человека именно этот код работает без этой ошибки, все нормально.

У меня WinXP у него Win7.
У обоих NetFramework 4.5.

Подскажите в чем может быть проблема.
Ниже приведу код... и саму ошибку..

1)

Код

        public void read()
        {
            try
            {
                if (_stream != null)
                {
                    if (_stream.CanRead)
                    {
                        _buffer = new byte[2];
                        _stream.BeginRead(_buffer, 0, 2, new AsyncCallback(OnReceiveCallbackStatic), null);
                    }
                }
            }
            catch (Exception ex)
            {
                CLogger.getInstance().info("[Login]: read() Exception: \n" + ex);
                close();
            }
        }


2)

Код

        private void OnReceiveCallbackStatic(IAsyncResult result)
        {
            int rs = 0;
            try
            {
                if(_stream == null)
                    CLogger.getInstance().warning("BAD STREAM");
                else
                    CLogger.getInstance().warning("GOOD STREAM");

                if (result == null)
                    CLogger.getInstance().warning("BAD result");
                else
                    CLogger.getInstance().warning("GOOD result");

                rs = _stream.EndRead(result);    // ТУТ

                CLogger.getInstance().warning("YOHOOOO!!!");

                if (rs > 0)
                {
                    CLogger.getInstance().warning("rs > 0: " + rs);
                    byte Length = _buffer[0];
                    if (_stream.DataAvailable)
                    {
                        _buffer = new byte[Length + 2];
                        _stream.BeginRead(_buffer, 0, Length + 2, new AsyncCallback(OnReceiveCallback), result.AsyncState);
                    }
                    else
                    {
                        CLogger.getInstance().warning("NO AVIABLE");
                    }
                }
                else
                {
                    CLogger.getInstance().warning("rs <= 0: " + rs);
                }
            }
            catch (Exception s)
            {
                CLogger.getInstance().warning("[Login]: " + _address + " was closed by force: " + s);
                close();
            }
        }


3)
Код

        private void OnReceiveCallback(IAsyncResult result)
        {
            _stream.EndRead(result);

            byte[] buff = new byte[_buffer.Length];
            _buffer.CopyTo(buff, 0);
            if (buff.Length >= 2)
            {
                buff = decryptC(buff, buff.Length);
                handlePacket(buff);
            }
            new Thread(read).Start();
        }


4) Сама ошибка.
Код

[Login]: Client connected.127.0.0.1:4450
Send: PROTOCOL_BASE_GET_SCHANNELLIST_ACK
GOOD STREAM
GOOD result
Отправляем :65; OPCODE: 2049
[Login]: 127.0.0.1:4450 was closed by force: System.IO.IOException: Не удается прочитать данные из транспортного соединения: Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения. ---> System.Net.Sockets.SocketException: Операция ввода/вывода была прервана из-за завершения потокакоманд или по запросу приложения
   в System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
   в System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
   --- Конец трассировки внутреннего стека исключений ---
   в System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
   в PBLoginServer.LoginClient.OnReceiveCallbackStatic(IAsyncResult result) в D:\_server\pb\_newPBDevelop\SHARP_Server\LoginServer\network\Login\LoginClient.cs:строка 171

=============

Зарание спасибо smile
PM MAIL   Вверх
Felixx
Дата 14.9.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Вот попытка подключиться телнетом.

user posted image
PM MAIL   Вверх
Fobos
Дата 16.9.2013, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Попробуйте посмотреть InnerException думаю это прольет свет на истинные причины.

Не, в Вашем случае это не поможет наверное. Подумаю еще smile

Это сообщение отредактировал(а) Fobos - 16.9.2013, 10:22
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.