simcard mensaje trans/receptor simulador

Tenemos un proyecto que nos debe enviar un mensaje a un gran número de simcard (más de 1 Millón) y recibir y manejar las respuestas.

para probar esto, estoy usando el Selenio SMPPSim a ssimulate enviar mensaje. este es un trabajo fino para el envío de mensajes. y con la habilitación de devolución de llamada servidor, puedo recibir los mensajes que envié en otro puerto.

pero mi pregunta es ¿cómo puedo enviar un mensaje de vuelta a SMPP servidor?

estoy usando EasySMPP biblioteca para la conexión a smpp servidor

mi SMPP Código de Servidor : servidor

    private SMPPClient _client;
    private readonly object _lockObject = new object();

    public SMPPClient GetClient()
    {
        if (_client != null)
        {
            return _client;
        }
        lock (_lockObject)
        {
            _client = new SMPPClient();
            var smsc = new SMSC
            {
                Host = "127.0.0.1",
                Port = 2775,
                SystemId = "smppclient1",
                Password = "password",
                SourceTon = 5,
                SourceNpi = 1,
                AddrTon = 1,
                AddrNpi = 1,
                SystemType = "8945",
            };
            _client.OnDeliverSm += Client_OnDeliverSm;
            Console.WriteLine("Client_OnDeliverSm added");
            _client.OnSubmitSmResp += Client_OnSubmitSmResp;
            Console.WriteLine("OnSubmitSmResp added");
            _client.AddSMSC(smsc);
            if (!_client.Connect())
                throw new Exception($"Can not connect to smpp link: {smsc.Host} : {smsc.Port}");
            return _client;
        }
    }

    public void SendByCampaignItemId()
    {
        var smppClient = GetClient();
        lock (smppClient)
        {
            var msgId = smppClient.SubmitSM(1, 1, "339123456789", 1, 1, "339632587436",
            0x40, // EsmClass.UdhIndicator
            0x7f, // protocol identifier
            0, // priority flag level 0
               DateTime.MinValue,
               DateTime.MinValue,
            // DateTime.Now.AddMinutes(10),
            //DateTime.Now.AddHours(3),
            (byte)DeliveryReportType.AlwaysSendDeliveryReport,
            0x00, //replace if present
            0xf6, // data coding
            0, // default msg id
            new byte[] { 0x02,0x70,0x00,0x34,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF});
        }
    }

    private void Client_OnSubmitSmResp(SubmitSmRespEventArgs e)
    {
        Console.WriteLine("Submit Received");
    }

    private void Client_OnDeliverSm(DeliverSmEventArgs e)
    {
        Console.WriteLine("Deliver Received");
    }

y aquí está mi código que se escucha desde el puerto 3333:

    static void Main(string[] args)
    {
        TcpListener server = null;
        try
        {
            Int32 port = 3333;
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");
            server = new TcpListener(localAddr, port);
            server.Start();

            // Buffer for reading data
            Byte[] bytes = new Byte[256];
            String data = null;
            while (true)
            {
                Console.Write("Waiting for a connection... ");
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");
                data = null;
                NetworkStream stream = client.GetStream();
                int i;
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: {0}", data);
                    data = data.ToUpper();
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                    stream.Write(msg, 0, msg.Length);


                    //WHAT SHOULD I DO HERE SO THAT I CAN SEND BACK A MESSAGE (DELIVER SM) TO SMPP SIM??!!!


                    Console.WriteLine("Sent: {0}", data);
                }
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            server.Stop();
        }


        Console.WriteLine("\nHit enter to continue...");
        Console.Read();
    }

y mi SMPPSIM archivo de configuración :

SMPP_PORT=2775
SMPP_CONNECTION_HANDLERS=10
CONNECTION_HANDLER_CLASS=com.seleniumsoftware.SMPPSim.StandardConnectionHandler
PROTOCOL_HANDLER_CLASS=com.seleniumsoftware.SMPPSim.StandardProtocolHandler
LIFE_CYCLE_MANAGER=com.seleniumsoftware.SMPPSim.LifeCycleManager
MESSAGE_STATE_CHECK_FREQUENCY=5000
MAX_TIME_ENROUTE=10000
DELAY_DELIVERY_RECEIPTS_BY=0
PERCENTAGE_THAT_TRANSITION=75
PERCENTAGE_DELIVERED=90
PERCENTAGE_UNDELIVERABLE=6
PERCENTAGE_ACCEPTED=2
PERCENTAGE_REJECTED=2
DISCARD_FROM_QUEUE_AFTER=60000
HTTP_PORT=88
HTTP_THREADS=1
DOCROOT=www
AUTHORISED_FILES=/css/style.css,/index.htm,/inject_mo.htm,/favicon.ico,/images/logo.gif,/images/dots.gif,/user-guide.htm,/images/homepage.gif,/images/inject_mo.gif
INJECT_MO_PAGE=/inject_mo.htm
SYSTEM_IDS=smppclient1,smppclient2
PASSWORDS=password,password
OUTBIND_ENABLED=false
OUTBIND_ESME_IP_ADDRESS=127.0.0.1
OUTBIND_ESME_PORT=2776
OUTBIND_ESME_SYSTEMID=smppclient1
OUTBIND_ESME_PASSWORD=password
DELIVERY_MESSAGES_PER_MINUTE=0
DELIVER_MESSAGES_FILE=deliver_messages.csv
LOOPBACK=TRUE
ESME_TO_ESME=false
OUTBOUND_QUEUE_MAX_SIZE=1000
INBOUND_QUEUE_MAX_SIZE=1000
DELAYED_INBOUND_QUEUE_PROCESSING_PERIOD=60
DELAYED_INBOUND_QUEUE_MAX_ATTEMPTS=100
DECODE_PDUS_IN_LOG=true
CAPTURE_SME_BINARY=false
CAPTURE_SME_BINARY_TO_FILE=sme_binary.capture
CAPTURE_SMPPSIM_BINARY=false
CAPTURE_SMPPSIM_BINARY_TO_FILE=smppsim_binary.capture
CAPTURE_SME_DECODED=false
CAPTURE_SME_DECODED_TO_FILE=sme_decoded.capture
CAPTURE_SMPPSIM_DECODED=false
CAPTURE_SMPPSIM_DECODED_TO_FILE=smppsim_decoded.capture
CALLBACK=true
CALLBACK_ID=SIM1
CALLBACK_TARGET_HOST=localhost
CALLBACK_PORT=3333
DELIVER_SM_INCLUDES_USSD_SERVICE_OP=false
DELIVERY_RECEIPT_OPTIONAL_PARAMS=true
DELIVERY_RECEIPT_TLV=1403/0A/34343132333435363738
SMSCID=SMPPSim
SIMULATE_VARIABLE_SUBMIT_SM_RESPONSE_TIMES=false

y otra pregunta:

si SMPPSim no es una buena opción para mi trabajo, ¿qué otra cosa puedo usar?