UDP-клиент в C # - PullRequest
       18

UDP-клиент в C #

0 голосов
/ 17 ноября 2010

Пытаюсь создать простое приложение UDP, используя C Sharp, ничего сложного, подключиться, отправить текст и получить его!но он продолжает выдавать это исключение!

"Существующее соединение было принудительно закрыто удаленным хостом"!

Код:

     byte[] data = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

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

    string welcome = "Hello, are you there?";
    data = Encoding.ASCII.GetBytes(welcome);
    server.SendTo(data, data.Length, SocketFlags.None, ipep);

    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint tmpRemote = (EndPoint)sender;

   data = new byte[1024];
    int recv = server.ReceiveFrom(data, ref tmpRemote);

    Console.WriteLine("Message received from {0}:", tmpRemote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));



    Console.WriteLine("Stopping client");
    server.Close();

спасибо =)

Ответы [ 4 ]

2 голосов
/ 09 июня 2011

Вы должны сообщить системе, что вы прослушиваете пакеты UDP на порту 9050, прежде чем вызывать прием.Добавить server.Bind(ipep); после Socket server = new Socket(...);

0 голосов
/ 16 июня 2017

Если вы не знаете IP-адрес автоответчика, вам лучше сделать: recv = server.Receive(data);

Вот мое предложение по вашему коду. Вы можете использовать цикл do-while, используя условие (в моем примере это бесконечный цикл):

        byte[] data = new byte[1024];
        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

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

        string welcome = "Hello, are you there?";
        data = Encoding.ASCII.GetBytes(welcome);
        server.ReceiveTimeout = 10000; //1second timeout
        int rslt =  server.SendTo(data, data.Length, SocketFlags.None, ipep);

        data = new byte[1024];
        int recv = 0;
        do
        {
            try
            {
                Console.WriteLine("Start time: " + DateTime.Now.ToString());
                recv = server.Receive(data); //the code will be stoped hier untill the time out is passed
            }
            catch {  }
        } while (true); //carefoul! infinite loop!

        Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
        Console.WriteLine("Stopping client");
        server.Close();
0 голосов
/ 17 ноября 2010

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

0 голосов
/ 17 ноября 2010

Вы пытались проверить, что IP-адрес действителен и порт не используется для чего-то еще?

Windows:

Пуск> Выполнить> "cmd ">" ipconfig ".

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