С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
2 / 0 / 7
Регистрация: 12.05.2012
Сообщений: 173
1

Приложение для передачи файлов + локальный чат

15.11.2016, 21:56. Показов 7019. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть приложение для отправки и получения файлов по локальной сети. На сокетах. Нашёл готовое и думал перебрать под себя. Полностью перевернул код и перенёс в свою программу. Сейчас, во время тестирования обнаружил, что программа не передаёт больших файлов. Вот программа Передача файлов.rar
Программу брал тут http://xnim.ru/blog?id=29Сегодня обнаружил похожую тему тут Чат локальной сети. Передача больших файлов

Посоветуйте пожалуйста как сделать!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2016, 21:56
Ответы с готовыми решениями:

Приложение для передачи файлов по сети
Доброго времени суток всем!!! Я тут новенький да и в программировании тоже. Меня собственно...

Нужен чат для офиса (30 компьютеров) с возможностью передачи файлов по локальной сети
Здравствуйте, нужен чат для офиса (30 компьютеров) с возможностью передачи файлов по локальной...

Клиент-серверное приложение для защищённой передачи файлов по сети
Нужно создать разработать программу на Паскале клиент-серверное приложение для защищённой передачи...

Локальный чат путем обмена сообщений с помощью текстовых файлов
Доброго времени суток. Решил написать простенький чат для локальной сети. Идея в том, что...

1
2 / 0 / 7
Регистрация: 12.05.2012
Сообщений: 173
16.11.2016, 09:02  [ТС] 2
Лучший ответ Сообщение было отмечено Sanya Black1993 как решение

Решение

Основной код программы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
namespace Peredacha
{
    public partial class Form1 : Form
    {
        String IP;
        int combo;
        public Form1()
        {
            InitializeComponent();
            //Создаем поток для приема сообщений
            new Thread(new ThreadStart(Receiver)).Start();
            new Thread(new ThreadStart(FileReceiver)).Start();
        }
        //Метод потока
        protected void Receiver()
        {
            //Создаем Listener на порт "по умолчанию"
            TcpListener Listen = new TcpListener(7000);
            //Начинаем прослушку
            Listen.Start();
            //и заведем заранее сокет
            Socket ReceiveSocket;
            while (true)
            {
                try
                {
                    //Пришло сообщение
                    ReceiveSocket = Listen.AcceptSocket();
                    Byte[] Receive = new Byte[256];
                    //Читать сообщение будем в поток
                    using (MemoryStream MessageR = new MemoryStream())
                    {
                        //Количество считанных байт
                        Int32 ReceivedBytes;
                        do
                        {//Собственно читаем
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            //и записываем в поток
                            MessageR.Write(Receive, 0, ReceivedBytes);
                            //Читаем до тех пор, пока в очереди не останется данных
                        } while (ReceiveSocket.Available > 0);
                        //Добавляем изменения в ChatBox
                        ChatBox.BeginInvoke(AcceptDelegate, new object[] { "Получаю: " + Encoding.Default.GetString(MessageR.ToArray()), ChatBox });    
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
 
        //Метод потока
        protected void FileReceiver()
        {
            //Создаем Listener на порт "по умолчанию"
            TcpListener Listen = new TcpListener(6999);
            //Начинаем прослушку
            Listen.Start();
            //и заведем заранее сокет
            Socket ReceiveSocket;
            while (true)
            {
                try
                {
                    string name;
                    //Пришло сообщение
                    ReceiveSocket = Listen.AcceptSocket();
                    Byte[] Receive = new Byte[256];
                    //Читать сообщение будем в поток
                    using (MemoryStream MessageR = new MemoryStream())
                    {
                        //Количество считанных байт
                        Int32 ReceivedBytes;
                        Int32 Firest256Bytes = 0;
                        String FilePath = "";
                        do
                        {//Собственно читаем
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            //Разбираем первые 256 байт
                            if (Firest256Bytes < 256)
                            {
                                Firest256Bytes += ReceivedBytes;
                                Byte[] ToStr = Receive;
                                //Учтем, что может возникнуть ситуация, когда они не могу передаться "сразу" все
                                if (Firest256Bytes > 256)
                                {
                                    Int32 Start = Firest256Bytes - ReceivedBytes;
                                    Int32 CountToGet = 256 - Start;
                                    Firest256Bytes = 256;
                                    //В случае если было принято >256 байт (двумя сообщениями к примеру)
                                    //Остаток (до 256) записываем в "путь файла"
                                    ToStr = Receive.Take(CountToGet).ToArray();
                                    //А остальную часть - в будующий файл
                                    Receive = Receive.Skip(CountToGet).ToArray();
                                    MessageR.Write(Receive, 0, ReceivedBytes);
                                }
                                //Накапливаем имя файла
                                FilePath += Encoding.Default.GetString(ToStr);
                            }
                            else
                                //и записываем в поток
                                MessageR.Write(Receive, 0, ReceivedBytes);
                            //Читаем до тех пор, пока в очереди не останется данных
                        } while (ReceivedBytes == Receive.Length);
                        //Убираем лишние байты
                        String resFilePath = FilePath.Substring(0, FilePath.IndexOf('\0'));
                        using (var File = new FileStream(resFilePath, FileMode.Create))
                        {//Записываем в файл
                            File.Write(MessageR.ToArray(), 0, MessageR.ToArray().Length);
                        }//Уведомим пользователя
                        ChatBox.BeginInvoke(AcceptDelegate, new object[] { "Получено: " + resFilePath, ChatBox });
                        name = resFilePath;
                    }
}
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
 
        /// <summary>
        /// Отправляет сообщение в потоке на IP, заданный в контроле IP
        /// </summary>
        /// <param name="Message">Передаваемое сообщение</param>
        void ThreadSend(object Message)
        {
            try
            {
                //Проверяем входной объект на соответствие строке
                String MessageText = "";
                if (Message is String)
                {
                    MessageText = Message as String;
                }
                else
                    throw new Exception("На вход необходимо подавать строку");
 
                Byte[] SendBytes = Encoding.Default.GetBytes(MessageText);
                //Создаем сокет, коннектимся
                IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(IP), 7000);
                Socket Connector = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                Connector.Connect(EndPoint);
                Connector.Send(SendBytes);
                Connector.Close();
                //Изменяем поле сообщений (уведомляем, что отправили сообщение)
                ChatBox.BeginInvoke(AcceptDelegate, new object[] { "Отправлено " + MessageText, ChatBox });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        //Делегат доступа к контролам формы
        delegate void SendMsg(String Text, RichTextBox Rtb);
        SendMsg AcceptDelegate = (String Text, RichTextBox Rtb) =>
        {
            Rtb.Text += Text + "\n";
        };
 
        private void button1_Click(object sender, EventArgs e)
        {
            IP = comboBox1.Text;
            Ping ping = new Ping();
            PingReply reply = ping.Send(IP);
            if (reply.Status != IPStatus.Success)
            {
                MessageBox.Show("Не удаётся подключиться!");
                button2.Enabled = false;
            }
            else {
                button2.Enabled = true;
                //Отправляем файл
                //Добавим на форму OpenFileDialog и вызовем его
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //Коннектимся
                    IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(IP), 6999);
                    Socket Connector = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    Connector.Connect(EndPoint);
                    //Получаем имя из полного пути к файлу
                    StringBuilder FileName = new StringBuilder(openFileDialog1.FileName);
                    //Выделяем имя файла
                    int index = FileName.Length - 1;
                    while (FileName[index] != '\\' && FileName[index] != '/')
                    {
                        index--;
                    }
                    //Получаем имя файла
                    String resFileName = "";
                    for (int i = index + 1; i < FileName.Length; i++)
                        resFileName += FileName[i];
                    //Записываем в лист
                    List<Byte> First256Bytes = Encoding.Default.GetBytes(resFileName).ToList();
                    Int32 Diff = 256 - First256Bytes.Count;
                    //Остаток заполняем нулями
                    for (int i = 0; i < Diff; i++)
                        First256Bytes.Add(0);
                    //Начинаем отправку данных
                    Byte[] ReadedBytes = new Byte[256];
                    using (var FileStream = new FileStream(openFileDialog1.FileName, FileMode.Open))
                    {
                        using (var Reader = new BinaryReader(FileStream))
                        {
                            Int32 CurrentReadedBytesCount;
                            //Вначале отправим название файла
                            Connector.Send(First256Bytes.ToArray());
                            do
                            {
                                //Затем по частям - файл
                                CurrentReadedBytesCount = Reader.Read(ReadedBytes, 0, ReadedBytes.Length);
                                Connector.Send(ReadedBytes, CurrentReadedBytesCount, SocketFlags.None);
                            }
                            while (CurrentReadedBytesCount == ReadedBytes.Length);
                        }
                    }
                    //Завершаем передачу данных
                    Connector.Close();
                }
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            new Thread(new ParameterizedThreadStart(ThreadSend)).Start("Получение"); //otpravka
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Environment.Exit(0);
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
           
        }
        private void button3_Click(object sender, EventArgs e)
        {
            panel2.Visible = false;
        }
 
        private void button3_Click_1(object sender, EventArgs e)
        {
            panel2.Visible = false;
            IP1.Text = ""; IP2.Text = ""; IP3.Text = ""; IP4.Text = "";
            textBox1.Text = "";
        }
 
        private void IP1_TextChanged(object sender, EventArgs e)
        {
            String a;
            int f;
            a = IP1.Text;
            try
            {
                f = int.Parse(a);
                for (int i = 0; i <= 10; i++)
                {
                    if (f == i) { a = i.ToString(); }
                }
            }
            catch
            {
                if (IP1.Text != "") { MessageBox.Show("Не верный символ!"); IP1.Text = ""; }
            }
        }
 
        private void IP2_TextChanged(object sender, EventArgs e)
        {
            String a;
            int f;
            a = IP2.Text;
            try
            {
                f = int.Parse(a);
                for (int i = 0; i <= 10; i++)
                {
                    if (f == i) { a = i.ToString(); }
                }
            }
            catch
            {
                if (IP2.Text != "") { MessageBox.Show("Не верный символ!"); IP2.Text = ""; }
            }
        }
 
        private void IP3_TextChanged(object sender, EventArgs e)
        {
            String a;
            int f;
            a = IP3.Text;
            try
            {
                f = int.Parse(a);
                for (int i = 0; i <= 10; i++)
                {
                    if (f == i) { a = i.ToString(); }
                }
            }
            catch
            {
                if (IP3.Text != "") { MessageBox.Show("Не верный символ!"); IP3.Text = ""; }
            }
        }
 
        private void IP4_TextChanged(object sender, EventArgs e)
        {
            String a;
            int f;
            a = IP4.Text;
            try
            {
                f = int.Parse(a);
                for (int i = 0; i <= 10; i++)
                {
                    if (f == i) { a = i.ToString(); }
                }
            }
            catch
            {
                if (IP4.Text != "") { MessageBox.Show("Не верный символ!"); IP4.Text = ""; }
            }
        }
    }
}
0
16.11.2016, 09:02
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2016, 09:02
Помогаю со студенческими работами здесь

Приложение для передачи зашифрованных сообщений
Как можно написать простенькое клиент/сервер приложение для передачи сообщений(зашифрованных по...

Приложение для передачи трафика с мобильного на ПК
Есть потребность в создании приложений, на ПК и мобильный. Надо раздавать трафик с мобильного на...

Локальный чат
Подскажи какие есть(вы используете) локальные чаты с сервером? Добавлено через 9 минут до 50...

Локальный чат
пишу локальный чат. столкнулся с проблемами: при коннекте к серверу клиент передаёт данные о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru