34 / 34 / 3
Регистрация: 12.10.2011
Сообщений: 175

Завершение приложения при вызове метода Socket.EndRecieve

06.11.2012, 10:34. Показов 686. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть один код (с):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public sealed class Client : Connectivity
{
        public void Connect(string remoteHost)
        {
            try
            {
                _mainSocket.Connect(_endPoint = new IPEndPoint(IPAddress.Parse(remoteHost), Port));
 
                if (ConnectionTry != null)
                    ConnectionTry(_mainSocket.Connected, EventArgs.Empty);
 
                recieve();
            }
            catch (Exception e) { }
        }
        void recieve()
        {
            ObjectStateInfo o = new ObjectStateInfo() { WorkSocket = _mainSocket };
 
            while (_mainSocket.Connected)
            {
                o.WorkSocket.BeginReceive(o.Buffer, 0, ObjectStateInfo.BufferSize, SocketFlags.None, recieve, o);
                Thread.Sleep(50);
            }
        }
        void recieve(IAsyncResult r)
        {
            lock (sync)
            {
                ObjectStateInfo o = (ObjectStateInfo)r.AsyncState;
                
                int recieved = o.WorkSocket.EndReceive(r);
                Batch batch;
 
                if (recieved > 0)
                {
                    batch = Batch.Decode(_encoder.GetString(o.Buffer, 0, recieved));
 
                    if (DataRecieved != null)
                        DataRecieved(batch, EventArgs.Empty);
 
                    startCalculate(batch);
                }
            }
        }
}
для полноты эффекта некоторые грязные подробности класса ObjectStateInfo, хотя не думаю, что пригодится
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    sealed class ObjectStateInfo
    {
        public static readonly int BufferSize;
 
        public Socket WorkSocket { get; set; }
        public byte[] Buffer { get; set; }
        public Batch Message { get; set; }
 
        static ObjectStateInfo()
        { BufferSize = 1024; }
        public ObjectStateInfo()
        {
            WorkSocket = null;
            Buffer = new byte[BufferSize];
            Message = null;
        }
    }
при вызове метода-САБЖа (int recieved = o.WorkSocket.EndReceive(r) приложение просто закрывается, не подав при этом ни малейшего звука
я так понимаю, суть ясна, нужно завершить асихронную передачу данных, заодно узнав, сколько данных мы получили
буду рад каким-либо комментариям, как же все-таки побороть этот метод, либо вариант, обойти его
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2012, 10:34
Ответы с готовыми решениями:

Ошибка при вызове метода до создания приложения
Шалом всем дотнетчикам и тем кто не у дел. Решил заняться изучением ASP.NET MVC. Прочтение книги мало что дало, поэтому решил...

Ошибка при вызове Socket.Connect()
Когда отправляю сообщение на свой IP, всё работает. Пытаюсь на чужой -- вылетает "Сделана попытка выполнить операцию на сокете при...

Краш приложения при вызове метода из другого класса через экземпляр
Привет Хочу вызвать метод из другого класса. Для это создаю экземпляр этого класса через конструктор с параметрами и вызываю метод через...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2012, 10:34
Помогаю со студенческими работами здесь

Многопоточность (завершение работы одного метода при завершении работы другого метода)
Нужна помощь! Как запустить метод во время выполнения другого метода (ну про потоки я кое-чего знаю, так что тут проблем нет), но потом...

Python select.error при вызове socket.close()
Добрый день. Помогите разобратся. Изучаю python на практике, пишу небольшой tcp сервер. Так вот в основном цикле у меня в while крутится...

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)?
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Ошибка при вызове приложения из другого приложения
Сделано два простеньких приложения и я хочу чтобы одно приложение запускало другое. В приложении, которое будет запущено установлен фильтр...

Ошибка при вызове метода
Только начал учить С#, попробивал запустить вот такой простой код. using System; using System.Collections.Generic; using...


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

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

Новые блоги и статьи
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru