Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336

Как проверить что клиент в сети через UDP протокол?

05.05.2013, 06:27. Показов 2242. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро. Есть Клиент и Сервер реализованные через Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp). Задача заключается в том, чтобы при появлении в сети Сервер отправил сообщение "Hello to UDP server lab №9", но, я не знаю как сделать проверку, что Клиент есть в сети.

PS: код можно не читать если знаете ответ на вопрос
PSS: сервер-клиент работают сейчас только при условии, что клиент запущен раньше чем сервер, из-за отправки "Hello to UDP server lab №9" клиенту.
PSSS: отправка и получение реализовано по разным портам, потому что так требовал преподаватель
PSSSS: выложил исходники на всякий случай

Сервер:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
 
namespace Server
{
    class Program
    {
        private static bool isServerRunning;
 
        private static void StartServer()
        {
            isServerRunning = true;
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint Point_listen = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1991);
            listener.Bind(Point_listen);
            Listen(listener);
        }
 
        private static void Listen(Socket listener)
        {
            IPEndPoint Point_writen = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1990);
            listener.SendTo(Encoding.UTF8.GetBytes("Hello to UDP server lab №9"), Encoding.UTF8.GetBytes("Hello to UDP server lab №9").Length, SocketFlags.None ,(EndPoint)Point_writen);
 
            while (isServerRunning)
            {
                byte[] data = new byte[1024];
                int recv = listener.Receive(data, data.Length, SocketFlags.None);
                string message = Encoding.UTF8.GetString(data, 0, recv);
                switch (message)
                {
                    case "STOP":
                        Console.WriteLine("Stop server");
                        isServerRunning = false;
                        break;
                    case "DataTime":
                        listener.SendTo(Encoding.UTF8.GetBytes(DateTime.Now.ToString()), Encoding.UTF8.GetBytes(DateTime.Now.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    case "AddressFamily":
                        listener.SendTo(Encoding.UTF8.GetBytes(listener.AddressFamily.ToString()), Encoding.UTF8.GetBytes(listener.AddressFamily.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    case "IPEndPoint":
                        listener.SendTo(Encoding.UTF8.GetBytes(listener.LocalEndPoint.ToString()), Encoding.UTF8.GetBytes(listener.LocalEndPoint.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    case "SocketType":
                        listener.SendTo(Encoding.UTF8.GetBytes(listener.SocketType.ToString()), Encoding.UTF8.GetBytes(listener.SocketType.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    case "SendBufferSize":
                        listener.SendTo(Encoding.UTF8.GetBytes(listener.SendBufferSize.ToString()), Encoding.UTF8.GetBytes(listener.SendBufferSize.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    case "ProtocolType":
                        listener.SendTo(Encoding.UTF8.GetBytes(listener.ProtocolType.ToString()), Encoding.UTF8.GetBytes(listener.ProtocolType.ToString()).Length, SocketFlags.None, (EndPoint)Point_writen);
                        break;
                    default:
                        Console.WriteLine("Client send: " + message);
                        break;
                }
            }
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Server is run!");
            StartServer();
        }
    }
}
Клиент:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace Client
{
    class Program
    {
        private static bool client_running = true;
 
        private static Socket client;
 
        private static void StartListen()
        {
            client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint Point_listen = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1990);
            client.Bind(Point_listen);
            Sent();
        }
 
        private static void Sent()
        {
            try
            {
                Listen();
                IPEndPoint Point_writing = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1991);
                while (client_running)
                {
                    Console.Write("Msg: ");
                    string msg = Console.ReadLine();
                    byte[] data = Encoding.UTF8.GetBytes(msg);
                    client.SendTo(data, data.Length, SocketFlags.None, (EndPoint)Point_writing);
                    if ((msg == "DataTime") || (msg == "AddressFamily") || (msg == "IPEndPoint") || (msg == "SocketType") || (msg == "SendBufferSize") || (msg == "ProtocolType")) Listen();
                }
            }
            catch
            {
            }
        }
 
        private static void Listen()
        {
            byte[] data_listen = new byte[1024];
            int recv = client.Receive(data_listen, data_listen.Length, SocketFlags.None);
            Console.WriteLine(Encoding.UTF8.GetString(data_listen, 0, recv));
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Client is run!");
            StartListen();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.05.2013, 06:27
Ответы с готовыми решениями:

Udp протокол в сети, определить адрес отправителя
С модуля клиента отправляю сообщение public static void sendMessage(string message) { UdpClient udp = new...

Принять данные через UDP протокол
Два дня смотрел что к чему в интернете, но так и понял что к чему. А может и понял, но роутерне пропускает пакеты, хотя вроде порт...

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

2
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
08.05.2013, 19:38
не совсем понял но м.б. речь идет о широковещательных сообщениях
0
 Аватар для nfernee
3 / 3 / 1
Регистрация: 13.03.2012
Сообщений: 29
09.05.2013, 20:53
Отправь из клиента на сервере какой то текст например connect_is_enable а после того когда сервер его примет отправь этот же текст обратно клиенту и пусть проверит на совпадение текста, если совпало то вот и коннект

я так делаю, но не нравится этот метод, пока других не знаю
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2013, 20:53
Помогаю со студенческими работами здесь

Как задать порт отправителя (Udp протокол)
Имеем: Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(ip...

Как сделать в 3 и 4 сети протокол RIP и класс адресов чтобы был в 3-ей и 4-ой сети: (в Packet Tracer)
Ребят как сделать в 3 и 4 сети протокол RIP и класс адресов чтобы был в 3-ей и 4-ой сети: В можете объяснить как это делается ???

Надежность звукового оповещения по сети. Использовать UDP или что-то другое?
Здравствуйте. Есть задача организовать звуковое оповещение по сети "Многоточка-Точки" (все точки либо выбранные точки). С...

Как сделать чтобы клиент получивший доступ к сети через VPN имел только ssh привилегии к конкретному хосту
всем здрасте. настроен radius server на windows 2008 r2 машине, клиентом которого является cisco asa 5515. vpn клиенты подключаются к...

UDP протокол
Всем привет! Я тут новичок, надеюсь местные законы не нарушил, создав эту тему. Вообщем очень интересует вопрос о UDP протоколе. Я любитель...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru