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

Работа с протоколом UDP

31.05.2009, 17:36. Показов 11865. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!!!
Ситуация такая есть клиент и сервер работают по протоколу udp, я отправляю с клиентской части сообщение а сервер его получает проблем нет.
А можно ли организовать так: я отправляю с клиента сообщение если сообщение дошло до сервера выдается сообщение что все в порядке если нет то через 5 секунд происходит повтор выполнения программы. У меня абсолютно ни каких идей нет.
Заранее спасибо.

Клиент
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
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
 
namespace UDP_Client 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
 
Console.WriteLine("Введите ip адрес"); 
string addr = Console.ReadLine(); 
Console.WriteLine("Введите номер порта?"); 
int port = int.Parse(Console.ReadLine()); 
Console.WriteLine("Введите текст для отправки"); 
string temp = Console.ReadLine(); 
Console.WriteLine("Нажмите любую кнопку для передачи данных"); 
Console.ReadKey(); 
//Создаем сокет 
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
//вводим необходимые параметры для удаленного сокета 
IPAddress ip = IPAddress.Parse(addr); 
IPEndPoint ipe = new IPEndPoint(ip, port); 
 
//разрешение широковещательного адреса 
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); 
 
byte[] buffer = Encoding.ASCII.GetBytes(temp); 
 
 
 
//передаем данные 
s.SendTo(buffer, ipe); 
 
//закрываем сокет 
s.Close(); 
Console.ReadKey(); 
} 
} 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2009, 17:36
Ответы с готовыми решениями:

Работа с протоколом весов
Нужна помощь! Программирую Ethernet весы по описанному протоколу, используя Socket. Но результат нулевой. Впервые взялся за...

Работа с протоколом UDP
подскажите пожалуйста как сделать так чтобы сервер выводил IP адрес и номер порта отправителя при отправке сообщения Сервер using...

Работа с протоколом UDP, не работает код
Доброго времени суток! Написал программку просто чата: namespace Chat { public partial class Form1 : Form { ...

9
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
01.06.2009, 03:00
Для этого сервер должен послать сообщение клиенту, что передача прошла успешно.

Что бы ваше приложение могло повторять свои действия используйте бесконечный цикл
C#
1
2
3
4
5
6
7
8
9
bool exit=false;
while(!exit)
{
    //здесь действие, которое будет повторяться
 
    //обязательно проверка на выход!
    if(/*проверка, не пора ли выйти из программы*/)
        exit=true;
}
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 5
01.06.2009, 22:36  [ТС]
А с этим можно что-нибудь сделать ???


Сервер

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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace UDP_Serv
{
class Program
{
static void Main(string[] args)
{
 
Console.WriteLine("Введите номер порта?");
int port = int.Parse(Console.ReadLine());
//Создаем локальный сокет
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
 
//вводим необходимые параметры для локального сокета
IPAddress ip = IPAddress.Any;
IPEndPoint ipe = new IPEndPoint(ip, port);
 
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,true);
 
//объеденяем сокет с параметрами
s.Bind(ipe);
byte[] buffer = new byte[256];
 
//создаем структуру для удаленного сокета
 
IPAddress ipRem = IPAddress.Any;
int portRem = 0;
IPEndPoint Rem = new IPEndPoint(ipRem, portRem);
EndPoint EndRem = (EndPoint)Rem;
 
Console.WriteLine("Ожидаем данные");
//прием данных
//параметры удаленного сокета будут содержаться в EndRem
string data = "";
 
try
{
s.ReceiveFrom(buffer, ref EndRem);
data = Encoding.ASCII.GetString(buffer);
Console.WriteLine("Прием данных закончен");
 
//закрываем сокет
s.Close();
}
catch
{
 
???????????????????????????????
 
}
Console.WriteLine(data);
Console.ReadKey();
}
}
}
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
02.06.2009, 02:23
Цитата Сообщение от nuda Посмотреть сообщение
А с этим можно что-нибудь сделать ???
Все что вашей душеньке угодно..

Нужно объединить клиента и сервера на каждой стороне. К серверу нужно добавить клиентскую часть, чтобы после приема, он отсылал клиенту сообщение. А к клиенту соответсвенно серверную часть. Чтобы клиент после отправки ждал входящего сообщения.
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 5
02.06.2009, 23:08  [ТС]
Ну ни получается отправить подтверждение с сервера клиенту, задолбался уже.
Нужно ли создавать новый соккет на сервере при отправке подтверждения клиенту? и откуда достать ip клиента если сообщение ни дошло?

Зато получилась задержка правда ни то что надо, но приятно.

s.SetSocketOption(SocketOptionLevel.Sock et, SocketOptionName.ReceiveTimeout,5000);

Я прошу прощения за дерзость может у кого-нибудь есть похожие исходники? Буду благодарен.
Спасибо.
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
03.06.2009, 02:56
Цитата Сообщение от nuda Посмотреть сообщение
откуда достать ip клиента если сообщение ни дошло?
Ни откуда. Это UDP. Для гарантий доставки есть TCP.
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
03.06.2009, 07:53
Всё правильно, вам надо просто сделать callback у сервера. Для этого нужно послать хоть какой-то пинг (1 байта хватит). В сервере достаточно будет вставить кусок кода такой(по контексту гляньте где вставить...):

s.ReceiveFrom(buffer, ref EndRem);
byte[] a = new byte[1];
a[0] = 1;
s.Send(a);
data = Encoding.ASCII.GetString(buffer);

Для клиента почти так же:
//передаем данные
s.SendTo(buffer, ipe);
byte[] a = new byte[1];
s.Receive(a);
//закрываем сокет

нужно синхронизировать клиент-сервер, как будто это одна программа, тогда всё будет ОК:-)
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 5
03.06.2009, 20:32  [ТС]
На сервере после этой строки s.Send(a) уходит в catch
значит отправлять ни хочет?

Добавлено через 47 минут 47 секунд
да ни очень получается
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
03.06.2009, 20:35
попробуйте временно убрать обработку исключений, тогда ошибка всё разъяснит. Или воспользуйтесь отладчиком - расставьте точки останова в критичных местах и проверяйте на каждой значения всех переменных.

Добавлено через 1 минуту 1 секунду
Цитата Сообщение от nuda Посмотреть сообщение
Я прошу прощения за дерзость может у кого-нибудь есть похожие исходники? Буду благодарен. Спасибо.
У меня есть, сам писал программу типа Radmin, только там соединение идет через TCP :-(
1
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 5
03.06.2009, 20:52  [ТС]
да у меня задача как раз на udp сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2009, 20:52
Помогаю со студенческими работами здесь

Работа с протоколом UDP. "Требуемый адрес для своего контекста неверен"
Доброго времени суток! Пишу простую программу переписки. Для того, чтобы понять, как работать с протоколом UDP решил написать...

Как различать клиентов на сервере с UDP протоколом?
Есть udp сервер, есть udp клиентская часть, связь между ними стабильная, но мне нужно как-то различать клиентов на сервере. Как лучше всего...

Работа с IP (TCP UDP)
как отправить пакет IP с определенным payload на какой-либо адрес IP? Как это вообще делается?

Работа с UDP протоколом за роутером (Port Restricted Cone NAT и в добавок Random port )
Посылая сообщение на внешний ip Nat роутера меняет порт.... и при попытки отправить ответ и указывая либо старый либо новый порт с ip...

Работа приложения с протоколом Bluetooth
Добрый день. Я всё еще воюю с подключением устройства, работающем с протоколом Bluetooth ble. Нашел пример работы, но тут описано для UWP....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru