Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329

UDP-клиент, исключение при BeginReceiveFrom

19.04.2014, 15:38. Показов 2062. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хай-хай. Смотрите какая штука, если сервер запущен, и клиент запускает BeginReceiveFrom с указанием серверной конечной точки, то все ок, но если сервер незапущен, то при вызове BeginReceiveFrom вылазиет ошибка
Удаленный хост принудительно разорвал существующее подключение
, но ведь UDP работает без подключения... Почему так?
Код клиента
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    public static class Client
    {
        private static string host = "127.0.0.1";
        private static int portReceive = 9061, portSend = 9060;
 
        private static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        private static byte[] buffer = new byte[1024];
        private static IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(host), portSend);
        private static EndPoint endPointSend = (EndPoint)ipEndPoint;
        public static EndPoint endPointReceive = new IPEndPoint(IPAddress.Parse(host), 0);
        private static bool isConnected = false;
 
        private static int ID=0;
 
        public static void Start()
        {
            Send("");
            try
            {
                socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endPointReceive, new AsyncCallback(ReceiveCallback), socket);
 
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
 
        private static void ReceiveCallback(IAsyncResult ar)
        {
            Socket socket = (Socket) ar.AsyncState;
            int n = socket.EndReceiveFrom(ar, ref endPointReceive);
            if (ID == 0 && n == 4)
                ID=BitConverter.ToInt32(buffer, 0);
            else if (ID != 0)
            {
                Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, n));
            }
            
            socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endPointReceive, new AsyncCallback(ReceiveCallback), socket);
        }
 
        public static void Send(string message)
        {
            byte[] buffer = GetPacket(message);
            try
            {
                socket.BeginSendTo(buffer, 0, buffer.Length, SocketFlags.None, endPointSend,
                    new AsyncCallback(SendCallback),
                    socket);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
 
        private static void SendCallback(IAsyncResult ar)
        {
            Socket socket = (Socket) ar.AsyncState;
            socket.EndSendTo(ar);
        }
 
        public static void Connect()
        {
            string message = "connect";
            byte[] buff = Encoding.UTF8.GetBytes(message);
            socket.SendTo(buff, 0, buff.Length, SocketFlags.None, endPointSend);
        }
 
        static byte[] GetPacket(string s)
        {
            if (ID != 0)
            {
                byte[] b1 = Encoding.UTF8.GetBytes(s);
                byte[] buff = new byte[b1.Length+6];
                b1.CopyTo(buff,6);
                BitConverter.GetBytes(ID).CopyTo(buff,2);
                byte[] tmp=new byte[buff.Length-2];
                Array.Copy(buff,2,tmp,0,tmp.Length);
                BitConverter.GetBytes(GetHash(tmp)).CopyTo(buff,0);
                return buff;
            }
            else
            {
                return Encoding.UTF8.GetBytes("1");
            }
        }
 
        static ushort GetHash(byte[] data)
        {
            int lenght = data.Length;
            byte[] buff;
            if (lenght % 2 == 1)
            {
                buff = new byte[lenght + 1];
                Array.Copy(data, buff, lenght);
                buff[lenght] = 0;
            }
            else
            {
                buff = data;
            }
 
            ushort hash = 0;
            for (int i = 0; i < lenght; i += 2)
            {
                hash ^= (ushort)BitConverter.ToInt16(buff, i);
            }
            return hash;
        }
 
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2014, 15:38
Ответы с готовыми решениями:

Клиент для UDP сервера!
Есть вот такой сервер: using System; using System.Collections.Generic; using System.Linq; using System.Net; using...

UDP клиент за NAT (с использованием STUN сервера)
Следующий код запускается за Nat-ом: using LumiSoft.Net.STUN.Client; using System; using System.Collections.Generic; using...

Клиент-Сервер на UDP. Работающий
Всем привет, я в C# недавно. Есть готовый клиент сервер на ЮДП. Отправляет только одно сообщение и на этом все. Мне надо что-бы и...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2014, 15:38
Помогаю со студенческими работами здесь

UDP клиент на C# прием broadcast с конкретного IP
Приветствую! Пытаюсь организовать прием UDP броадкаст. В сети имеется нескольких серверов, каждый из которых шлет широковещательные ...

Простейшие коды клиент-сервера UDP
Собственно, вопрос избитый уверен. Помогите, плиз, разобраться. Пишу контрольную. Простейшие коды клиент-сервера UDP: Клиент: using...

Определить в сети клиент или нет UDP
Здравствуйте! Имею 10 датчиков передающие информацию по средствам UDP, датчики шлют информацию на ПК 4 раза в 1сек. Вот думаю как...

UDP клиент-сервер. Проброс порта у клиента
В TCP-IP т.к устанавливается соединение мы используем для связи с сервером тот же сокет с которым подключались. Возможна как отправка...

Организовать клиент-серверное приложение, использующее протоколы TCP/UDP
есть какие то примерчики по работе с Socket? надо организовать клиент-серверное приложение использующее протоколы TCP / UDP


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru