Esempio n. 1
0
        protected void Receiver()
        {
            var Listen = new TcpListener(7000);

            Listen.Start();
            Socket ReceiveSocket;

            while (true)
            {
                try
                {
                    ReceiveSocket = Listen.AcceptSocket();
                    var Receive = new Byte[256];
                    using (MemoryStream MessageR = new MemoryStream())
                    {
                        int ReceivedBytes;
                        do
                        {
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            MessageR.Write(Receive, 0, ReceivedBytes);
                        } while (ReceiveSocket.Available > 0);
                        SendMsg("← " + Encoding.Default.GetString(MessageR.ToArray()), ChatBox);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Esempio n. 2
0
        public void P2PListen()
        {
            int backlog = 10;

            ListenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            // bind 侦听 socket
            {
                ListenerSocket.Bind(ListenerEP);
            }
            catch (SocketException se)
            {
                MessageBox.Show(se.Message);
                return;
            }
            //开始侦听
            ListenerSocket.Listen(backlog);
            while (true)
            {
                try
                {
                    ReceiveSocket = ListenerSocket.Accept();
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message);
                }
                //记录IP和EP
                remoteEP = (IPEndPoint)ReceiveSocket.RemoteEndPoint;
                remoteIP = remoteEP.Address;

                //开始接收消息
                int lentmp = ReceiveSocket.Receive(receiveByte);
                lenReceiveAll = 0;
                //把接收到的复制到receiveByteAll中
                Array.Copy(receiveByte, 0, receiveByteAll, lenReceiveAll, lentmp);
                lenReceiveAll += lentmp;

                //循环,把后续所有的都收到并存在receiveByteAll中
                while (lentmp > 0)
                {
                    lentmp = ReceiveSocket.Receive(receiveByte);
                    Array.Copy(receiveByte, 0, receiveByteAll, lenReceiveAll, lentmp);
                    lenReceiveAll += lentmp;
                }

                //软停止,收到一字节的0
                if (lenReceiveAll == 1)
                {
                    if (receiveByteAll[0] == 0)
                    {
                        break;
                    }
                }
                ReceiveSocket.Close();
                newMessage = true;
            }
            ListenerSocket.Close();
        }
Esempio n. 3
0
        public PluginClient(int sendPort, int receivePort)
        {
            _sendSocket                     = new SendSocket(HostName, sendPort);
            _receiveSocket                  = new ReceiveSocket(HostName, receivePort);
            _sendSocket.Connection         += connected => SocketConnectionHandler(_sendSocket, connected);
            _receiveSocket.Connection      += connected => SocketConnectionHandler(_receiveSocket, connected);
            _receiveSocket.MessageReceived += ReceiveSocketOnMessageReceived;

            _eventProcessingThread = new ProcessingThread("PluginClient Event Processing thread", EventProcessingIteration);
        }
Esempio n. 4
0
        /// <summary>
        /// Ожтдает отправки файла. Если файл получен уложить его в this.memorystream,
        /// чтобы потом утправить методом Sender
        /// </summary>
        public void Receiver(String host, int port)
        {
            try
            {
                MemoryStream mStream = new MemoryStream();
                TcpListener  Listen  = new TcpListener(IPAddress.Parse(host), port);
                Listen.Start();
                Socket ReceiveSocket;
                while (true)
                {
                    ReceiveSocket = Listen.AcceptSocket();
                    Byte[] Receive = new Byte[256];
                    using (MemoryStream MessageFile = new MemoryStream())
                    {
                        //Количество считанных байт
                        Int32 ReceivedBytes;
                        do
                        {
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            MessageFile.Write(Receive, 0, ReceivedBytes);
                            //Читаем до тех пор, пока в очереди не останется данных
                        } while (ReceivedBytes == Receive.Length);

                        MessageFile.Position = 0;
                        MessageFile.CopyTo(this.memorystream);
                    }
                    break; //не принципиально, но тогда можно явно закончить поток
                    // и отобразить на форме
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Connected failed",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }
Esempio n. 5
0
        // Приём файла
        private void recieveThread_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker   = sender as BackgroundWorker;
            TcpListener      Listener = new TcpListener(5678);
            string           filename;

            Listener.Start();
            Socket ReceiveSocket;
            int    progress = 0;

            while (send_allow)
            {
                try
                {
                    ReceiveSocket = Listener.AcceptSocket();
                    System.Windows.Forms.SaveFileDialog savedial = new SaveFileDialog();
                    //if (System.Windows.Forms.DialogResult.OK == savedial.ShowDialog())
                    // {
                    filename = "C:/test.txt";//savedial.FileName;
                    //}
                    Byte[] Receive = new Byte[256];

                    //using (MemoryStream MessageR = new MemoryStream())
                    {
                        //Количество считанных байт
                        Int32      ReceivedBytes;
                        Int32      Firest256Bytes = 0;
                        String     FilePath       = "";
                        Int64      filesize       = 0;
                        Int64      all_size       = -1;
                        FileStream fl             = null;
                        String     resFilePath    = "";
                        Stopwatch  stopWatch      = new Stopwatch();
                        Stopwatch  stopWatch2     = new Stopwatch();
                        string     speed          = "0";

                        int speed_last = 0;
                        int count      = 0;
                        do
                        {//Собственно читаем
                            if (count == 0)
                            {
                                stopWatch.Restart();
                            }
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            all_size     += ReceivedBytes;
                            //Разбираем первые 256 байт
                            if (Firest256Bytes < 256)
                            {
                                Firest256Bytes += ReceivedBytes;
                                Byte[] ToStr = Receive;
                                all_size -= 256;

                                //Накапливаем имя файла
                                FilePath   += Encoding.Default.GetString(ToStr);
                                resFilePath = FilePath.Substring(0, FilePath.IndexOf('\0'));
                                fl          = new FileStream(resFilePath, FileMode.Create);
                            }
                            else
                            if (Firest256Bytes < 512)
                            {
                                all_size       -= 256;
                                Firest256Bytes += ReceivedBytes;
                                Byte[] ToStr    = Receive;
                                string str_size = "";

                                str_size += Encoding.Default.GetString(ToStr);
                                String res_size = str_size.Substring(0, str_size.IndexOf('\0'));
                                filesize = Convert.ToInt64(res_size);

                                all_size = 0;

                                file_desc f    = new file_desc(resFilePath, filesize);
                                byte[]    mess = new byte[1];

                                if (!AcessFileSafe(f))
                                {
                                    toLogSafe(login + " | Приём файла " + resFilePath + " | Передача отклонена");
                                    mess[0] = 0;
                                    ReceiveSocket.Send(mess);
                                    return;
                                }
                                else
                                {
                                    mess[0] = 1;
                                    ReceiveSocket.Send(mess);
                                    stopWatch.Start();
                                    stopWatch2.Start();
                                }
                            }
                            else
                            {
                                count++;
                                if (count == 100)
                                {
                                    TimeSpan ts = stopWatch.Elapsed;

                                    int progres = (int)(all_size / (filesize / 100));

                                    int      speed_cur = Convert.ToInt32((25600 * 1000 / 1024) / ts.TotalMilliseconds);
                                    TimeSpan ts2       = stopWatch2.Elapsed;

                                    if (ts2.Seconds > 1)
                                    {
                                        stopWatch2.Restart();
                                        speed      = Convert.ToString(speed_cur);
                                        speed_last = speed_cur;
                                    }


                                    recieveThread.ReportProgress(progres, speed);
                                    count = 0;
                                }
                                //и записываем в поток


                                fl.Write(Receive, 0, ReceivedBytes);
                            }

                            //Читаем до тех пор, пока в очереди не останется данных
                        } while (all_size != filesize && !sendThread.CancellationPending);

                        if (recieveThread.CancellationPending)
                        {
                            ReceiveSocket.Close();
                            recieveThread.ReportProgress(0, "0");
                            toLogSafe(login + " | Приём файла " + resFilePath + " | Передача отменена");
                        }
                        else
                        {
                            ReceiveSocket.Close();
                            toLogSafe(login + " | Приём файла " + resFilePath + " | завершен от " + another_login);
                        }
                    }
                }
                catch (System.Exception er)
                {
                    toLogSafe("Ошибка : " + er.Message);
                }
            }
        }
Esempio n. 6
0
        private void FileRecive()
        {
            //Создаем Listener на порт "по умолчанию"
            TcpListener Listen = new TcpListener(1572);

            //Начинаем прослушку
            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'));
                        MessageBox.Show(resFilePath);


                        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);
                }
            }
        }
Esempio n. 7
0
        //   public static string Mesajcurrent = "Idle";

        protected void FileReceiver()
        {
            string name;

            name = textBox1.Text;
            //Создаем Listener на порт "по умолчанию"
            TcpListener Listen = new TcpListener(6999);

            Listen.Stop();
            //Начинаем прослушку
            Listen.Start();
            //и заведем заранее сокет
            Socket ReceiveSocket;

            while (true)
            {
                try
                {
                    //Пришло сообщение
                    ReceiveSocket = Listen.AcceptSocket();
                    Byte[] Receive = new Byte[1024];
                    //Читать сообщение в поток
                    using (MemoryStream MessageR = new MemoryStream())
                    {
                        //Количество считанных байт
                        Int32  ReceivedBytes;
                        Int32  Firest1024Bytes = 0;
                        String FilePath        = "";
                        do
                        {// читаем
                            ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                            //Разбираем первые 1024 байт
                            if (Firest1024Bytes < 1024)
                            {
                                Firest1024Bytes += ReceivedBytes;
                                Byte[] ToStr = Receive;
                                //проверка на то что не всегда они передаются сразу
                                if (Firest1024Bytes > 1024)
                                {
                                    Int32 Start      = Firest1024Bytes - ReceivedBytes;
                                    Int32 CountToGet = 1024 - Start;
                                    Firest1024Bytes = 1024;
                                    //В случае если было принято >1024 байт (двумя сообщениями к примеру)
                                    //Остаток (до 1024) записываем в "путь файла"
                                    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);
                        }
                        SendMessage("\n " + name + ":" + "Файл отправляется" + ";;;5");
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                SendMessage("\n " + name + ":" + "Файл отправлен" + ";;;5");
            }
        }