Почему мой клиент udp не генерирует исключение, когда я пытаюсь получить данные в методе RecData ()? - PullRequest
1 голос
/ 19 мая 2019

Это для многопользовательской видеоигры:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

namespace ShootingMasters
{
    public class Communicator
    {
        public UdpClient client;
        public IPAddress toconnectto;

        public Communicator(IPAddress toconnectto)
        {
            this.toconnectto = toconnectto;
            client = new UdpClient();
            client.Connect(toconnectto, 25565);
        }

        public void SendData(string data)
        {
            byte[] bdata = ASCIIEncoding.ASCII.GetBytes(data);
            IPEndPoint iP = new IPEndPoint(toconnectto, 25565);

            try
            {
                client.Send(bdata, bdata.Length);
            }
            catch(Exception e)
            {
            }
        }

        public string RecData()
        {
            if (client.Available > 0)
            {
                try
                {
                    IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Any, 25565);
                    byte[] data = client.Receive(ref iPEndPoint);
                    return ASCIIEncoding.ASCII.GetString(data);
                }
                catch(Exception e)
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }
    }
}

Когда вы вызываете метод receive, он возвращает значение NULL, поскольку было сгенерировано исключение. Сообщение об исключении было

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

Кроме того, внутри получателя client.Available = 1, затем сразу после возникновения исключения - 0.

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