예제 #1
0
        public void getResult(MathService ms)
        {
            Console.WriteLine("UDP protocol being used.");
            UdpClient client = new UdpClient(4000);

            try
            {
                while (true)
                {
                    var    endPoint = new IPEndPoint(IPAddress.Any, 0);
                    string s        = "";
                    while (true)
                    {
                        var receiveBytes = client.Receive(ref endPoint);
                        s = Encoding.ASCII.GetString(receiveBytes);
                        if (s == "Close")
                        {
                            break;
                        }
                        var x = Encoding.ASCII.GetBytes("Result:  " + ms.Delegate(s));
                        client.Send(x, x.Length, endPoint);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #2
0
        public void SendResult()
        {
            IPEndPoint  endpoint = new IPEndPoint(localAddr, port);
            TcpListener listener = new TcpListener(endpoint);

            //listener.Start();
            Console.WriteLine(@"Started listening requests at: {0}:{1}  ", endpoint.Address, endpoint.Port);
            while (true)
            {
                listener.Start();
                string messeage = null;

                TcpClient sender = listener.AcceptTcpClient();
                byte[]    buffer = new byte[sender.ReceiveBufferSize];
                Console.WriteLine("Request is accepted");
                sender.GetStream().Read(buffer, 0, buffer.Length);
                messeage = cleanMessage(buffer);
                MathService ms    = new MathService();
                double      res   = ms.PerformOperation(messeage);
                byte[]      bytes = ASCIIEncoding.ASCII.GetBytes("Your answer is " + res);
                sender.GetStream().Write(bytes, 0, bytes.Length);
                sender.Close();
                listener.Stop();
            }
        }
예제 #3
0
 /// <summary>
 /// Constructs new instance of MathServer class.
 /// </summary>
 /// <param name="ipEndPoint"> Server IP endpoint.</param>
 public MathServer(IPEndPoint ipEndPoint)
 {
     this.ipEndPoint  = ipEndPoint;
     this.tcpServer   = new TcpListener(this.ipEndPoint);
     this.udpServer   = new UdpClient(this.ipEndPoint);
     this.mathService = new MathService();
 }
예제 #4
0
        /// <summary>
        /// Makes basic math operations.
        /// </summary>
        /// <param name="operation">Operation with a specified format.</param>
        /// <param name="result">The result of operation.</param>
        /// <returns>Returns true if operation was successfully done, else returns false.</returns>
        private static bool TryDoMathOperation(string operation, out double?result)
        {
            result = null;
            var splitString = operation.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);

            if (splitString.Length != 3)
            {
                return(false);
            }
            var oper = splitString[0];

            double firstOperand;

            if (!Double.TryParse(splitString[1], out firstOperand))
            {
                return(false);
            }
            double secondOperand;

            if (!Double.TryParse(splitString[2], out secondOperand))
            {
                return(false);
            }

            MathService service = new MathService();

            Operations operations = null;

            switch (oper)
            {
            case "+":
                operations += service.Add;
                break;

            case "-":
                operations += service.Sub;
                break;

            case "*":
                operations += service.Mult;
                break;

            case "/":
                if (secondOperand == 0)
                {
                    return(false);
                }
                operations += service.Div;
                break;

            default:
                return(false);
            }

            result = operations(firstOperand, secondOperand);
            return(true);
        }
예제 #5
0
        public void SendResult(MathService ms)
        {
            //for getting
            UdpClient clientget = new UdpClient();

            clientget.Client.Bind(new IPEndPoint(IPAddress.Any, port));

            //for sending
            UdpClient clientsend = new UdpClient();

            clientsend.Connect(localAddr, 1000);

            try
            {
                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 1);

                string message = String.Empty;

                do
                {
                    var receiveBytes = clientget.Receive(ref RemoteIpEndPoint);
                    message = Encoding.ASCII.GetString(receiveBytes);

                    Console.WriteLine(message);

                    string tiv1      = null;
                    string tiv2      = null;
                    string operator1 = null;

                    Drop(message, ref operator1, ref tiv1, ref tiv2);

                    ms.num1 = Convert.ToDouble(tiv1);
                    ms.num2 = Convert.ToDouble(tiv2);

                    string result = Convert.ToString(ms.PerformOperation(Convert.ToChar(operator1)));

                    var sendBytes = Encoding.ASCII.GetBytes(result);
                    clientsend.Send(sendBytes, sendBytes.Length);
                    Console.WriteLine("worked");
                }while (message != "exit");

                //closing client
                clientget.Close();
                clientsend.Close();
            }
            catch (Exception)
            {
                Console.WriteLine("Something goes wrong...disconnected");
                return;
            }
        }
        static void Main(string[] args)
        {
            MathService  ms       = new MathService();
            TcpListener  listener = null;
            StreamReader reader   = null;
            TcpClient    client   = null;
            string       protocol = "";

            try
            {
                listener = new TcpListener(IPAddress.Any, 4000);
                listener.Start();
                while (true)
                {
                    client   = listener.AcceptTcpClient();
                    reader   = new StreamReader(client.GetStream());
                    protocol = reader.ReadLine();
                    if (protocol == "TCP" || protocol == "UDP")
                    {
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if (listener != null)
                {
                    reader.Close();
                    client.Close();
                    listener.Stop();
                }
            }
            IServiceProtocol serviceProtocol;

            if (protocol == "TCP")
            {
                serviceProtocol = new TCP();
            }
            else
            {
                serviceProtocol = new UDP();
            }
            serviceProtocol.getResult(ms);
        }
예제 #7
0
        static void Main(string[] args)
        {
            MathService ms = new MathService();

            //creating 2 threads
            TCP tcppr = new TCP();
            UDP udppr = new UDP();

            //getting them methods
            Thread tr1 = new Thread(() => tcppr.SendResult(ms));
            Thread tr2 = new Thread(() => udppr.SendResult(ms));

            //starting the threads
            tr1.Start();
            tr2.Start();
        }
예제 #8
0
        public void ProcessResult()
        {
            int        port      = 13000;
            IPAddress  localAddr = IPAddress.Parse("127.0.0.1");
            UdpClient  listener  = new UdpClient(port);
            IPEndPoint groupEP   = new IPEndPoint(localAddr, port);
            Socket     sock      = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


            try
            {
                while (true)
                {
                    Console.WriteLine("UDP server is waiting for broadcast... ");
                    byte[] bytes = listener.Receive(ref groupEP);

                    Console.WriteLine($"Received broadcast from {groupEP} :");
                    string data = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
                    Console.WriteLine($" {data}");

                    // Process the data sent by the client.
                    MathService mathService = new MathService();
                    double      result      = mathService.PerformOperation(data);
                    data = result.ToString();

                    bytes = System.Text.Encoding.ASCII.GetBytes(data);

                    sock.SendTo(bytes, groupEP);
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                listener.Close();
            }
        }
예제 #9
0
        /// <summary>
        /// getting result using UDP
        /// </summary>
        /// <param name="ms"></param>
        public void getResult(MathService ms)
        {
            Console.WriteLine("TCP protocol being used");
            TcpListener listener = null;

            try
            {
                listener = new TcpListener(IPAddress.Any, 4000);
                listener.Start();
                while (true)
                {
                    var    client = listener.AcceptTcpClient();
                    var    reader = new StreamReader(client.GetStream());
                    var    writer = new StreamWriter(client.GetStream());
                    string s      = reader.ReadLine();
                    while (s != "Close")
                    {
                        writer.WriteLine("Result:  {0}", ms.Delegate(s));
                        writer.Flush();
                        s = reader.ReadLine();
                    }
                    reader.Close();
                    writer.Close();
                    client.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if (listener != null)
                {
                    listener.Stop();
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Sends result to the user using TCP protocol
        /// </summary>
        /// <param name="ms"></param>
        public void SendResult(MathService ms)
        {
            while (true)
            {
                try
                {
                    TcpListener server = new TcpListener(localAddr, port);
                    server.Start();
                    Console.WriteLine("Waiting for connection... ");

                    TcpClient tcpClient = server.AcceptTcpClient();
                    Console.WriteLine("Client is connected,doing queary...");

                    //getting network stream for reading and writing
                    NetworkStream stream = tcpClient.GetStream();

                    //Confirming message
                    string response = "CONNECTED";
                    byte[] data1    = Encoding.UTF8.GetBytes(response);

                    //sending message
                    stream.Write(data1, 0, data1.Length);

                    string messageString;
                    do
                    {
                        StringBuilder message = new StringBuilder();
                        byte[]        data    = new byte[256];

                        int bytes = stream.Read(data, 0, data.Length);
                        message.Append(Encoding.UTF8.GetString(data, 0, bytes));
                        messageString = message.ToString();
                        Console.WriteLine(messageString);

                        if (messageString == "exit")
                        {
                            break;
                        }
                        else if (messageString == "other protocol")
                        {
                            break;
                        }
                        if (messageString != String.Empty)
                        {
                            string tiv1      = null;
                            string tiv2      = null;
                            string operator1 = null;

                            Drop(messageString, ref operator1, ref tiv1, ref tiv2);

                            ms.num1 = Convert.ToDouble(tiv1);
                            ms.num2 = Convert.ToDouble(tiv2);

                            double result = ms.PerformOperation(Convert.ToChar(operator1));
                            Console.WriteLine("Worked");

                            string send = Convert.ToString(result);

                            byte[] data2 = Encoding.UTF8.GetBytes(send);
                            stream.Write(data2, 0, data2.Length);
                        }
                    }while (messageString != String.Empty);

                    stream.Close();
                    //closing
                    tcpClient.Close();
                    server.Stop();
                }
                catch (Exception)
                {
                    Console.WriteLine("Something goes wrong...disconnected");
                    return;
                }
            }
        }
예제 #11
0
        public void ProcessResult()
        {
            try
            {
                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];
                String data  = null;

                // Enter the listening loop.
                while (true)
                {
                    Console.Write("TCP server is waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected!");

                    data = null;

                    // Get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;

                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        // Translate data bytes to a ASCII string.
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                        Console.WriteLine("Received: {0}", data);

                        // Process the data sent by the client.
                        MathService mathService = new MathService();
                        double      result      = mathService.PerformOperation(data);
                        data = result.ToString();

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                        // Send back a response.
                        stream.Write(msg, 0, msg.Length);
                        Console.WriteLine("Sent: {0}", data);
                    }

                    // Shutdown and end connection
                    client.Close();
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }


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