Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > .Net Remoting Операция с файлами


Автор: Мурлыкатам_ 5.2.2007, 21:21
smile 
Нун мне пример: Клиент берет файл и отправляет его серверу. Сервер принимает и записывает его в целевую папку. Самый простой и убожественный пример, но чтобы там фигурировала бинарная передача файла...
Хотя бы пример бинарной передачи файлов.

Автор: mr.DUDA 6.2.2007, 18:57
Дык если ремоутинг, то на клиенте грузим файл в байтовый массив, вызываем серверный метод с передачей этого массива, а серверный метод принимает и сохраняет у себя в файл.

Добавлено @ 18:58 
Или ремоутинг в целом непонятен ?  smile 

Автор: Мурлыкатам_ 6.2.2007, 19:08
mr.DUDA, Я сегодня уже зачитался литературой, в общем Ремотинг понятен, суть его. Мне не хватает алгоритмов, способов, хитриков. Т.е. с си шарпом я сталкивался тока на учебе, в очень убожественном объеме. И пока очень тяжело самостоятельно все это освоить, без примеров толковых.
Плиз хелп  smile 

Автор: -Mikle- 8.2.2007, 17:41
Блин, тяжко отвечать на такие вопросы... Скажи что у тебя уже есть, с чем разобрался?
Вот специально составленный список вопросов, чтобы понять твои достижения в этом вопросе:

1. не понятно как вообще Remoting сконфигурить, создать и все такое?
2. не понятно как на стороне клиента создать Remoting объект?
3. не понятно как вызывать методы удаленного объекта smile ?

Короче, в чем проблемы? Я в свое время с Remoting'ом до того на-мучился, и потом на-разобрался, что говорил с ним на "языке приказов" smile. Пиши конкретные вопросы - дадим конкретные ответы. И, плиз, если вопросы разные по сути, создавай отдельные темы, так другие участники смогут быстрее найти ответы на свои похожие вопросы. 

Автор: Мурлыкатам_ 29.9.2007, 20:15
Вот чего я добился, благодаря гасподину mr.Duda:

Клиент передает файл на сервер!!!!!  smile 
Правда весьма корявым способом: 
1. Сервер:
Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using comm;
namespace RemotingServer
{
    
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("go!");
            TcpChannel c = new TcpChannel(32469);
            ChannelServices.RegisterChannel(c);
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(comm.CommonObject),
                "RemComObj.tcp",
                WellKnownObjectMode.Singleton);
           Console.ReadLine();
        }
    }

}

Общий объект:
Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;


namespace comm
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>

        public class CommonObject: MarshalByRefObject
        {
            public CommonObject()
            {
                Console.WriteLine("Starting..");
            }
            public void GetFileToServ(string fileName, byte[] content)
            {   Console.WriteLine("Starting reciving file: {0}", fileName);
                Console.WriteLine("File size: {0}", content.Length);
                // сохраняем у себя
                string filePath = Path.Combine(@"e:\", fileName);
                FileStream file = File.Create(filePath);
                file.Write(content, 0, content.Length);
                file.Close();
            }

        }
    }


3. Клиент:
Код

using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using comm;
namespace remotingClent
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Client
    {
        
        void SendFile(string filePath)
        {
            // зачитываем файл
            
            
        
        }
        
        [STAThread]
        static void Main(string[] args)
        {
           Console.WriteLine("go go go!");
           TcpChannel c = new TcpChannel();
           ChannelServices.RegisterChannel(c);
           object remServO = Activator.GetObject(typeof(comm.CommonObject),
                "tcp://localhost:32469/RemComObj.tcp");
           CommonObject remcomm =  (CommonObject)remServO;
            string filePath = "c:\\3.jpg";
            
            FileStream file = File.Open(filePath, FileMode.Open);
            byte[] content = new byte[file.Length];
            file.Read(content, 0, (int)file.Length);
            Console.WriteLine(file.Length);
            remcomm.GetFileToServ("3333.jpg", content);
            file.Close();

            Console.ReadLine();






        }
    }
}



Осталось тока навести красоту: обработать исключения и предусмотреть передачу файлов папками (по заданию - рекурсивно извлекать файлы из папки).
Собственно вопрос: как организовать рекурсивное извлечение файлов из папки? 
Как передать content красиво, если делать полноценную функцию передачи, чтобы потом можно было отдельно вызвать функцию сервера на сохранение файла?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)