Тестирование сокетной коммуникационной программы - PullRequest
1 голос
/ 03 марта 2009

Я начинаю с программирования сокетов с помощью простой программы UDPClient для отправки некоторых данных. Большой фрагмент кода ниже:

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ShowIP
{
    public static void Main(string[] args)
    {
        string name = Dns.GetHostName();
        //name = "GSL1460";
        name = "GSL1296";
        try
        {
            IPAddress[] addrs = Dns.GetHostEntry(name).AddressList;
            foreach (IPAddress addr in addrs)
                Console.WriteLine("{0}/{1}", name, addr);

            Console.WriteLine("Started listening");
            Thread listenerThread = new Thread(new ThreadStart(StartListeningUDP));
            listenerThread.Start();

            Console.WriteLine("Started sending");
            for (int counter = 0; counter <= 3; counter++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Sending {0} time", counter.ToString());
                StartSendingUDP(addrs[0]);
            }
            Console.ReadLine();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    private static void StartListeningUDP()
    {
        UdpClient udpListener = null;
        IPEndPoint nwPoint = new IPEndPoint(IPAddress.Any, 12345);

        while (true)
        {
            try
            {
                udpListener = new UdpClient(12345);
                Console.WriteLine("Waiting to receive");
                Byte[] receivedBytes = udpListener.Receive(ref nwPoint);
                string receivedData = Encoding.ASCII.GetString(receivedBytes);

                Console.WriteLine("Data received : " + receivedData);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                udpListener.Close();
            }
        }
    }

    private static void StartSendingUDP(IPAddress clientAddress)
    {
        UdpClient udpSender = new UdpClient();
        try
        {
            Byte[] sendBytes = Encoding.ASCII.GetBytes("Say HI to Papa...");

            Console.WriteLine("Data Sent : Say HI to Papa...");
            udpSender.Send(sendBytes, sendBytes.Length, new IPEndPoint(clientAddress, 12345));
        }
        finally
        {
            udpSender.Close();
        }

    }
}

Пример отлично работает на локальном компьютере, но я не могу отправить данные на другой компьютер в интрасети.

Во время тестирования

  • Раскомментирую соответствующий код для отправки данных на его машину
  • Я использую бит приемника на своей машине
  • Проверили, что требуемый порт открыт на его машине

Я что-то упустил? Пожалуйста, предложите.

Ответы [ 4 ]

1 голос
/ 03 марта 2009

udpSender.Flush

0 голосов
/ 26 октября 2009

вы не можете отправлять UDP через Интернет, не сделав ничего раньше. по пути вы получите слишком много фильтров udp. даже если вы отключите брандмауэр, ваш модем маршрутизатора / провайдера может быть настроен на его блокировку. иначе - серверы вашего провайдера заблокируют его. так что на самом деле вам нужно будет убедиться, что этот порт открыт для UDP, так же как на вашем локальном хосте он не будет работать, если вы не откроете этот порт в брандмауэре и / или не установите петлевой адаптер

0 голосов
/ 04 марта 2009

UDP-слушатель может прослушивать только локальный хост. Вы можете попробовать заменить

udpListener = new UdpClient(12345)

в StartListeningUDP () с

udpListener = new UdpClient(new IPEndPoint(IPAddress.Any,12345))
0 голосов
/ 03 марта 2009

Я не человек C #, поэтому я не могу комментировать слишком много вашего кода, но в целом все выглядит хорошо. Убедитесь, что IP-адрес, на который вы отправляете, корректно разрешается на принимающем устройстве.

Кроме того, проверьте, не заблокировала ли Windows ваше интернет-соединение, и попробуйте отключить брандмауэр, если это так. И я знаю, что у Microsoft есть некоторые идеи о «безопасном» коде, которые вызывали у нас некоторые проблемы в прошлом. У меня нет никаких подробностей, но в проекте могут быть настройки, которые не позволяют ему получить доступ к сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...