Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 17:45   #1
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию C# передача файлов в сети

задача такая - есть компьютер сервер и много компьютеров клиентов. допустим первый клиент отправляет файл на сервер. остальные клиенты могут снять этот файл с сервера допустим по имени файла. (по идее работает как файлообменник). нужно чтобы эта система могла работать сразу с несколькими клиентами (например, одновременно файлы могут заливать и качать несколько клиентов)

я немного погуглил и узнал, что есть некий асинхронный метод передачи файлов. может кто-нибудь знает и может объяснить как с ним работать. или может у кого есть примеры или какие-нибудь наработки, исходники? или может быть тут не походит данный метод?
Life if about choices
Make the right choice

Последний раз редактировалось TaTT DoGG; 13.02.2010 в 17:47.
TaTT DoGG вне форума Ответить с цитированием
Старый 13.02.2010, 18:07   #2
GROWZER
Пользователь
 
Аватар для GROWZER
 
Регистрация: 16.06.2009
Сообщений: 47
По умолчанию

можно сделать через сокеты...
примеры тут..
http://msdn.microsoft.com/ru-ru/libr...eventargs.aspx
GROWZER вне форума Ответить с цитированием
Старый 13.02.2010, 18:15   #3
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

спасибо, попробую разобраться. если что-то не будет получаться, то напишу
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 13.02.2010, 20:29   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

При конекте человека к серверу на сервере выделяеться для него определенный поток, что дает возможность работать с каждым по отдельности
Сокеты нужны чтобы передовать информацию...
dampirik вне форума Ответить с цитированием
Старый 13.02.2010, 21:05   #5
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

т.е. мне нужен ещё код коннекта клиента к серверу?
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 13.02.2010, 21:52   #6
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

вот небольшая схема того, как всё должно работать

в инете пока не нашел ни одного примера, чтобы файлы передавались от сервера к клиенту
есть 1 пример, но он использует WCF
статья с мсдн пока никак не помогла
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 14.02.2010, 00:36   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Проблемы именно с чем возникают?С конектом? с передачей? с организацией много поточности??
dampirik вне форума Ответить с цитированием
Старый 14.02.2010, 16:43   #8
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

проблем пока не возникает, потому что я не занимался ещё сокетами. вот нашел хороший пример. попробую его разобрать
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 14.02.2010, 20:46   #9
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Будут вопросы пиши поможем
dampirik вне форума Ответить с цитированием
Старый 14.02.2010, 23:26   #10
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

всё-таки примеры не помогли, слишком много неизвестного в них.
немного почитал инфы и сообразил вот такие серверную и клиентскую части
Server Side
Код:
using System;
using System.Net.Sockets;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener serverSocket = new TcpListener(8888);
            TcpClient clientSocket = default(TcpClient);
            serverSocket.Start();
            clientSocket = serverSocket.AcceptTcpClient();
            int requestCount = 0;

            while ((true))
            {
                try
                {
                    requestCount = requestCount + 1;
                    NetworkStream networkStream = clientSocket.GetStream();
                    byte[] bytesFrom = new byte[10025];
                    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                    string dataFromClient = Encoding.UTF8.GetString(bytesFrom);
                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                    Console.WriteLine("Client: " + dataFromClient);
                    string serverResponse = Convert.ToString(requestCount);
                    Byte[] sendBytes = Encoding.UTF8.GetBytes(serverResponse);
                    networkStream.Write(sendBytes, 0, sendBytes.Length);
                    networkStream.Flush();
                    Console.WriteLine("Сервер: " + serverResponse);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            clientSocket.Close();
            serverSocket.Stop();
        }
    }
}
Client Side
Код:
using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;


namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        TcpClient clientSocket = new TcpClient();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            clientSocket.Connect("127.0.0.1", 8888);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NetworkStream serverStream = clientSocket.GetStream();
            byte[] outStream = Encoding.UTF8.GetBytes("Message from Client$");
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();

            byte[] inStream = new byte[10025];
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = Encoding.UTF8.GetString(inStream);
            textBox1.Text = textBox1.Text + Environment.NewLine + " >> Server: " + returndata;
        }
    }
}
ситуация такая
1) при закрытии клиентской части, сервер начинает бесконечно писать ошибку. пробовал закрывать сокет и прослушивальщика - не помогло
2) сервер не хочет работать сразу с несколькими клиентами

правильный ли у меня код? если нет, то помогите плз его подправить
и ещё вопрос: стоит ли мне гонять текст туда сюда, если мне всё равно нужно передавать файлы, а время поджимает?
Life if about choices
Make the right choice

Последний раз редактировалось TaTT DoGG; 15.02.2010 в 00:29.
TaTT DoGG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки, передача файлов по сети SeЯgey Работа с сетью в Delphi 3 02.04.2011 23:51
Передача файлов по сети SL1CK Работа с сетью в Delphi 3 05.12.2009 00:08
Передача файлов по сети Sparky Общие вопросы Delphi 5 31.10.2009 19:34
Передача файлов по локальной сети(Indy) Biowulf86 Помощь студентам 1 08.05.2008 13:08