Пример #1
0
        static void Process(Socket client)
        {
            ClassConsole.SetTitle(connections);
            ClassConsole.WriteLine("Node connected from address " + client.RemoteEndPoint, "NODE_SRV", Colors.DarkGreen, Colors.DarkCyan);

            const int maxMessageSize = 1024;

            byte[] response;
            int    received;

            //client.Send(Encoding.ASCII.GetBytes("FromServer7"));

            while (true)
            {
                // Receive message from the server:
                response = new byte[maxMessageSize];
                received = client.Receive(response);

                List <byte> respBytesList = new List <byte>(response);
                respBytesList.RemoveRange(received, maxMessageSize - received); // truncate zero end
                if (Encoding.ASCII.GetString(respBytesList.ToArray()) == "")
                {
                    connections = (connections - 1);
                    ClassConsole.SetTitle(connections);
                    ClassConsole.WriteLine("Node disconnected from address " + client.RemoteEndPoint, "NODE_SRV", Colors.DarkGreen, Colors.DarkCyan);
                    client.Close();
                    return;
                }
                else
                {
                    ClassConsole.WriteLine("[" + client.RemoteEndPoint + "] " + Encoding.ASCII.GetString(respBytesList.ToArray()), "NODE_SRV", Colors.DarkBlue, Colors.DarkCyan);
                }
            }

            /*while (true)
             * {
             *
             *  // Send message to the client:
             *  client.Send(Encoding.ASCII.GetBytes("FromServer"));
             *
             *  // Receive message from the server:
             *  response = new byte[maxMessageSize];
             *  received = client.Receive(response);
             *
             *  List<byte> respBytesList = new List<byte>(response);
             *  respBytesList.RemoveRange(received, maxMessageSize - received); // truncate zero end
             *  Console.WriteLine("[SRV] [" + client.RemoteEndPoint + "] Client->Server: " + Encoding.ASCII.GetString(respBytesList.ToArray()));
             * }*/
        }
Пример #2
0
        public static void Open()
        {
            int backlog = -1, port = Config.Port;

            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            server.ReceiveTimeout = -1;

            // Start listening.
            try
            {
                ClassConsole.WriteLine("Starting node server on address " + IPAddress.Any + ":" + Config.Port, "NODE_SRV", Colors.DarkGreen, Colors.DarkCyan);
                server.Bind(new IPEndPoint(IPAddress.Any, port));
                server.Listen(backlog);
            }
            catch (Exception)
            {
                ClassConsole.WriteLine("Could not start server, port " + Config.Port + " is already used!", "NODE_SRV", Colors.Red, Colors.DarkCyan);
                return;
            }

            ClassConsole.WriteLine("Node server started", "NODE_SRV", Colors.Green, Colors.DarkCyan);

            while (true)
            {
                // If connection is made with client
                Socket client = server.Accept();
                new System.Threading.Thread(() => {
                    try
                    {
                        clientSockets.Add(client); connections = (connections + 1);
                        Process(client);
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message == "An existing connection was forcibly closed by the remote host.")
                        {
                            connections = (connections - 1);
                            ClassConsole.SetTitle(connections);
                            ClassConsole.WriteLine("Node disconnected from address " + client.RemoteEndPoint, "NODE_SRV", Colors.DarkGreen, Colors.DarkCyan);
                        }
                        else
                        {
                            ClassConsole.WriteLine("Client connection processing error: " + ex.Message, "NODE_SRV", Colors.Red, Colors.DarkCyan);
                        }
                    }
                }).Start();
            }
        }