Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UDP send не шлет: где я ошибаюсь? / 5 сообщений из 5, страница 1 из 1
18.03.2013, 13:23
    #38187910
Konstantin Dav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP send не шлет: где я ошибаюсь?
Приветствую!
Я уже два дня бьюсь с посылкой пакетов из своего приложения.
В попытках разобраться я все упростил до максимального предела:
1) Система Windows 7 x64 sp1 english.
2) Для независимых экспериментов поставил Microsoft Loopback Adapter и дал ему статический IP 192.168.10.10.
3) поставил Network Monitor 3.4, прибиндил его ко всем имеющимся в системе адаптерам
4) Отключил виндовый файервол и проверил, что на машине нет никакого антивируса.
5) наконец, запустил простое консольное приложение на C#, состоящее из одного файла Program.cs:
Код: 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.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace UdpSendConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.10.10"), 9000);
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
      while (true)
      {
        try
        {
          string text = "Hello at " + DateTime.Now.ToLongTimeString();
          byte[] buf  = Encoding.ASCII.GetBytes(text );
          sock.SendTo(buf, endPoint);
          System.Threading.Thread.Sleep(100);
        }
        catch (Exception ex)
        {
          Console.Write( "Exception: " + ex.Message );
        }
      }
    }
  }
}


В нескольких примерах, которые я нашел, советуют посылать UDP пакеты именно так.
Для определенности я даже отключил на время эксперимента локальную сеть.
Но нетворк монитор не ловит ни одного UDP пакета.
Естественно, я проверил, что NM прибинден ко всем имеющимся в системе адаптерам и там не стоит никаких фильтров.
И попробовал поменять IP 192.168.10.10 на 127.0.0.1 и на реальный IP реальной сетевой карты,
предварительно включив ее.
Проверил на двух разных машинах.
Но это не помогает — видимо, где то я ошибаюсь.
Не подскажете ли, где?
...
Рейтинг: 0 / 0
18.03.2013, 14:03
    #38187991
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP send не шлет: где я ошибаюсь?
Konstantin Dav,

А зачем при посылке цикл вайл со слипом? Это делают, обычно, при чтении в отдельном тхреаде.
ПС. Читаете Вы его чем?
...
Рейтинг: 0 / 0
18.03.2013, 14:28
    #38188054
Konstantin Dav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP send не шлет: где я ошибаюсь?
Я поставил вайл со слипом чтобы он много много раз посылал пакет.
Дальше: как я понимаю, UDP безразлично, есть ли "на том конце" слушатель - это протокол без установления соединения.
Я просто смотрю пакеты в NetworkMonitor.
Всякие мусорные пакеты - есть, моих UDP пакетов - нет.

Есть такое вот руководство, которое "на грани внятности":
http://codeidol.com/csharp/csharp-network/Using-The-Csharp-Sockets-Helper-Classes/The-UdpClient-Class/
оно вроде бы описывает то, что нужно, но я все равно не могу понять его.
Потому что нет ни одного примера, где было бы все объяснено в терминах "sender" и "receiver".
А только какие то абстрактные сервера, которые отвечают клиентам.
А мне не надо клиентам отвечать. Мне надо просто слать пакеты на определенный адрес в определенный порт.
...
Рейтинг: 0 / 0
18.03.2013, 14:44
    #38188081
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP send не шлет: где я ошибаюсь?
Konstantin Dav...А мне не надо клиентам отвечать. Мне надо просто слать пакеты на определенный адрес в определенный порт.
Другую сторону (принимающую) покажите.

ПС. Я писал под UDP, только под мультикаст. Там несколько другая технология. Там сервера, как такового нету. Данные пишутся (и читаются) на определённый виртуальный адрес, а клиенты просто "подсоединяется" и могут писать и читать. Для этого имеется специальный диапазон адресов. А порты - как обычно, начиная с 1000.
...
Рейтинг: 0 / 0
18.03.2013, 14:50
    #38188098
Konstantin Dav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP send не шлет: где я ошибаюсь?
Ну по большому счету я это приложение пишу именно для отладки того, что потом будет мультикастовым.

Я разобрался.

Слабым звеном был NetworkMonitor.
Клиент


Код: 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.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace UdpListenerConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      UdpClient listener = new UdpClient(11000);

      IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 11000);

      string received_data;
      byte[] receive_byte_array;

      try
      {
        while(true)
        {
          receive_byte_array = listener.Receive(ref groupEP);

          Console.WriteLine("Received a broadcast from {0}", groupEP.ToString());
          received_data = Encoding.ASCII.GetString(receive_byte_array, 0, receive_byte_array.Length);
          Console.WriteLine("data follows \n{0}\n\n", received_data);
        }
      }
      catch (Exception ex)
      {
        Console.Write("Exception: " + ex.Message );
      }
    }
  }
}


прекрасно слышит сервер

Код: 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.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace UdpSendConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      int tCnt = 0;
      while (true)
      {
        try
        {
          string text = "Hello at " + DateTime.Now.ToLongTimeString();
          byte[] buf = Encoding.ASCII.GetBytes(text);

          Socket sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

          IPAddress send_to_address = IPAddress.Parse("192.168.10.10");
          IPEndPoint sending_end_point = new IPEndPoint(send_to_address, 11000);

          sending_socket.SendTo(buf, sending_end_point);


          Console.Write(tCnt++.ToString() + " ");
          //sock.SendTo(buf, endPoint);
          System.Threading.Thread.Sleep(100);
        }
        catch (Exception ex)
        {
          Console.Write( "Exception: " + ex.Message );
        }
      }
    }
  }
}


и выводит на экран пойманные пакеты
Но NM глух, как пень. Почему - х его з.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UDP send не шлет: где я ошибаюсь? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]