public static void ReadFile(string directory, TcpClient c)
 {
     Packet sp = new Packet();
     sp.Type = (byte)PacketType.CONNECTED;
     byte[] sbuff = Encoding.UTF8.GetBytes("readfile|" + directory);
     sp.Length = sbuff.Length;
     sp.Data = sbuff;
     sp.Send(c);
 }
 public static void Listdir(string path, TcpClient c)
 {
     Packet sp = new Packet();
     sp.Type = (byte)PacketType.CONNECTED;
     byte[] sbuff = Encoding.ASCII.GetBytes("listdir|" + path);
     sp.Length = sbuff.Length;
     sp.Data = sbuff;
     sp.Send(c);
 }
        public static Packet Deserialize(byte[] source)
        {
            Packet packet = new Packet();
                packet.Type = source[0];
                byte[] szBuff = new byte[4];
                for (int i = 0; i < 4; i++)
                    szBuff[i] = source[i + 1];
                int len = BitConverter.ToInt32(szBuff, 0);
                packet.Length = len;
                byte[] dataBuff = new byte[len];

                for (int i = 4; i < (len + 4); i++)
                    dataBuff[i - 4] = source[i + 1];

                packet.Data = dataBuff;
                PacketType type = (PacketType)packet.Type;
                return packet;
        }
Exemple #4
0
        //public static TcpListener listener;
        static void Main(string[] args)
        {
            Console.Title = "Server"; //window title
            Console.WindowWidth = 110; //window width
            Console.WindowHeight = 42; //windot heigth

            WriteManager.wl("\n>> Start the server with the command: server_start <ip> <port>");
            WriteManager.wl("\n>> If you want start the server on localhost, write the command: server_default, the server will be started on port 8881");
            WriteManager.wl("\n>> Write --help to view all commands or exit, to close the server! ", ConsoleColor.DarkGray);
            new Thread(cmd).Start();
            while (true)
            {
                if (!serverStarted)
                    continue;

                TcpClient client = ServerStart.Listener.AcceptTcpClient();
                clients.Add(client.Client.RemoteEndPoint.ToString());
                clientestcp.Add(client);
                WriteManager.wl("\n>> Client Connected (" + client.Client.RemoteEndPoint.ToString() + ")", ConsoleColor.White);

                new Thread(new ParameterizedThreadStart((o) =>
                {
                    TcpClient c = (TcpClient)o;

                    while (true)
                    {
                        try
                        {
                            //NetworkStream ns = c.GetStream();
                            byte[] rbuff = new byte[ServerDefaultConfig.MAX_PACKET_SIZE];
                            int recvlen = c.Client.Receive(rbuff);

                            if (recvlen == 0)
                            {
                                Console.WriteLine(">> Client disconnected");
                                clients.RemoveAll(cstr => cstr == c.Client.RemoteEndPoint.ToString());
                                break;
                            }

                            Packet p = Packet.Deserialize(rbuff);
                            PacketType type = (PacketType)p.Type;

                            switch (type)
                            {
                                /* REQ */
                                case PacketType.REQ_CONNECTED:
                                    {
                                        string connectedClients = String.Join("|", clients);
                                        Packet sp = new Packet();
                                        sp.Type = (byte)PacketType.CONNECTED;
                                        byte[] sbuff = Encoding.UTF8.GetBytes(connectedClients);
                                        sp.Length = sbuff.Length;
                                        sp.Data = sbuff;
                                        sp.Send(c);
                                    }
                                    break;

                                case PacketType.STRING:
                                    {
                                       // Console.WriteLine("loko");
                                        string msg = Encoding.UTF8.GetString(p.Data, 0, p.Length);
                                        WriteManager.wl("String from " + c.Client.RemoteEndPoint);
                                        WriteManager.wl(msg, ConsoleColor.Yellow);
                                    }
                                    break;

                                case PacketType.CLIENT_INFO:
                                    {
                                        string clientInfo = Encoding.UTF8.GetString(p.Data, 0, p.Length);
                                        WriteManager.wl("\n ----Client Infos: ---- ", ConsoleColor.White);
                                        WriteManager.wl("   PC Name:", ConsoleColor.White);
                                        WriteManager.w("     " + clientInfo.Split('|')[0], ConsoleColor.Yellow);
                                        WriteManager.wl("\n   File location: ", ConsoleColor.White);
                                        WriteManager.w("     " + clientInfo.Split('|')[1], ConsoleColor.Yellow);
                                        WriteManager.wl("\n ---- End ----", ConsoleColor.White);
                                        //clientsName.Add(clientInfo.Split('|')[0]);
                                    }
                                    break;
                                case PacketType.IMAGE:
                                    {

                                    }
                                    break;

                                case PacketType.LIST_DIR:
                                    {
                                        WriteManager.wl("Directories from " + c.Client.RemoteEndPoint);
                                        string dirsource = Encoding.ASCII.GetString(p.Data, 0, p.Length);
                                        if (dirsource == "FileNotExists")
                                            WriteManager.wl("Directory not found!", ConsoleColor.Red);
                                        else
                                        {
                                            string[] dirsplit = dirsource.Split('|');

                                            string maindir = dirsplit[0];
                                            WriteManager.wl("\t" + maindir, ConsoleColor.White);

                                            for (int i = 1; i < dirsplit.Length; i++)
                                                WriteManager.wl("\t" + dirsplit[i], ConsoleColor.Yellow);
                                        }
                                    }
                                    break;
                            }
                            string[] infos_to_list = Console.ReadLine().Split(' ');
                            IOFunctions.Listdir(infos_to_list[1], c);
                        }

                        catch(Exception er)
                        {
                            clients.RemoveAll(cstr => cstr == c.Client.RemoteEndPoint.ToString());
                            clientestcp.Remove(client);
                            Console.WriteLine(er.Message);
                            break;
                        }

                    }

                })).Start(client);
            }
        }