Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.IO;
- using System.Net.Sockets;
- using System.Net;
- using System.Threading;
- //using System.Data.SqlClient;
- using System.Net.NetworkInformation;
- using System.Runtime.InteropServices;
- using System.Windows;
- 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('