コード例 #1
0
        public void Process(byte[] data)
        {
            var message = Encoding.ASCII.GetString(data);
            message = message.Substring(0, message.IndexOf('\r'));

            FtpServerMessageHandler.SendMessage(Id, message);

            string command;
            string value;

            int spaceIndex = message.IndexOf(' ');

            if (spaceIndex < 0)
            {
                command = message.ToUpper();
                value = string.Empty;
            }
            else
            {
                command = message.Substring(0, spaceIndex).ToUpper();
                value = message.Substring(command.Length + 1);
            }

            var handler = commandHashTable[command] as FtpCommandHandler;
            if (handler == null)
            {
                FtpServerMessageHandler.SendMessage(Id, string.Format("\"{0}\" : Unknown command", command));
                SocketHelpers.Send(Socket, "550 Unknown command\r\n");
            }
            else
            {
                handler.Process(value);
            }
        }
コード例 #2
0
        private void ThreadRun()
        {
            this.serverSocketListener = SocketHelpers.CreateTcpListener(port);

            if (this.serverSocketListener != null)
            {
                this.serverSocketListener.Start();

                FtpServerMessageHandler.SendMessage(0, "FTP Server Started");
                this.UpdateSubSystemHost(this, "FTP Server Multi-Threaded Core Started");

                bool shouldContinue = true;

                while (shouldContinue)
                {
                    TcpClient socket = null;

                    try
                    {
                        socket = serverSocketListener.AcceptTcpClient();
                    }
                    catch (SocketException)
                    {
                        shouldContinue = false;
                    }
                    finally
                    {
                        if (socket == null)
                        {
                            shouldContinue = false;
                        }
                        else
                        {
                            socket.NoDelay = false;

                            id++;

                            FtpServerMessageHandler.SendMessage(id, "New connection");
                            this.UpdateSubSystemHost(this, "New connection id = " + id);

                            SendAcceptMessage(socket);
                            this.InitialiseSocketHandler(socket);
                        }
                    }
                }
            }
            else
            {
                FtpServerMessageHandler.SendMessage(0, "Error in starting FTP server");
                this.UpdateSubSystemHost(this, "Error in starting FTP server");
            }
        }
コード例 #3
0
        private void CloseSocket()
        {
            FtpServerMessageHandler.SendMessage(this.Id, "Connection closed");

            if (this.clientSocket.Connected)
            {
                this.clientSocket.Close();
            }

            if (this.Closed != null)
            {
                this.Closed(this);
            }
        }