Restablecimiento de la conexión al recibir el paquete en el servidor UDP

Estoy trabajando en una aplicación de servidor (C #, .NET 4.0) que necesitará manejar miles de paquetes UDP cada segundo. Así que decidíSocketAsyncEventArg Para implementar el servidor.

El problema al que me enfrento es que mi implementación recibe solo un paquete y luego recibo el error "ConnectionReset" (nunca imaginé que podría obtener este error porque UDP no tiene conexión). Aquí está mi implementación de prueba:

<code>using System;
using System.Net;
using System.Net.Sockets;

static class Program
{
    static void Main(string[] args)
    {
        UdpEchoServer.Start();

        while (true)
        {
            Console.ReadLine();
            SendPacket();
        }
    }

    static void SendPacket()
    {
        Console.WriteLine("SendPacket");
        var c = new UdpClient();
        c.Send(new byte[5], 5, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 445));
        c.Close();
    }
}

static class UdpEchoServer
{
    static Socket mSocket;
    static byte[] mBuffer;
    static SocketAsyncEventArgs mRxArgs, mTxArgs;
    static IPEndPoint mAnyEndPoint, mLocalEndPoint;

    public static void Start()
    {
        mAnyEndPoint = new IPEndPoint(IPAddress.Any, 0);
        mLocalEndPoint = new IPEndPoint(IPAddress.Any, 445);

        mBuffer = new byte[1024];

        mRxArgs = new SocketAsyncEventArgs();
        mTxArgs = new SocketAsyncEventArgs();

        mRxArgs.Completed += ReceiveComplete;
        mTxArgs.Completed += SendComplete;

        mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        mSocket.Bind(mLocalEndPoint);
        ReceiveNext();
    }

    static void ReceiveNext()
    {
        Console.WriteLine("ReceiveNext");

        mRxArgs.RemoteEndPoint = mAnyEndPoint;
        mRxArgs.SetBuffer(mBuffer, 0, mBuffer.Length);

        if (!mSocket.ReceiveFromAsync(mRxArgs))
            Console.WriteLine("Error in ReceiveNext: " + mRxArgs.SocketError);
    }

    static void ReceiveComplete(object sender, SocketAsyncEventArgs e)
    {
        Console.WriteLine("Receive Complete: " + mRxArgs.SocketError);

        if (mRxArgs.SocketError != SocketError.Success)
            return;

        mTxArgs.SetBuffer(mBuffer, 0, mRxArgs.BytesTransferred);
        mTxArgs.RemoteEndPoint = mRxArgs.RemoteEndPoint;

        Console.WriteLine("Sending reply packet");

        if (!mSocket.SendToAsync(mTxArgs))
            Console.WriteLine("Error in ReceiveComplete: " + mRxArgs.SocketError);
    }

    static void SendComplete(object sender, SocketAsyncEventArgs e)
    {
        Console.WriteLine("Send Complete: " + mTxArgs.SocketError);

        if (mTxArgs.SocketError != SocketError.Success)
            return;

        ReceiveNext();
    }
}
</code>

Lo siento por código largo pero es realmente simple. Espero un paquete, respondo al punto final remoto y luego espero el siguiente. Aquí está la salida:

<code>ReceiveNext

SendPacket
Receive Complete: Success
Sending reply packet
Send Complete: Success
ReceiveNext
Error in ReceiveNext: ConnectionReset
</code>

Por favor, ¿puede sugerir lo que está mal en el fragmento de código anterior?

Respuestas a la pregunta(2)

Su respuesta a la pregunta