// Отправка файла. public void Send_File(string s) { // Сообщение содержащее часть файла. Messages.Message mes; // Сообщение содержащее имя файла. RequestMessage name = new RequestMessage(s); // Сообщение содержащее подтверждение получения. Messages.Message resp; // Размер буффера считываемых данных. const int buffersz = 1022; // Буффер для частей файла. byte[] buffer = new byte[buffersz]; // Размер считанных данных. int btscpd = 0; // Выделение пути к запрашиваемому файлу. string path = Path.Combine(cl_path, s); // Проверка существования файла. if (File.Exists(path)) { // Выделение потоков для отправки файла. using (FileStream inFile = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) using (NetworkStream stream = clnt.GetStream()) { // Отправка имени файла. NW.Send(name, stream); // Ожидание ответа. do { resp = NW.Recieve(stream); } while (resp.Get_Data() == string.Empty); do { // Считывание данных с файла. btscpd = inFile.Read(buffer, 0, buffersz); // Проверка на пустоту считанных данных. if (btscpd > 0) { mes = new FilePartMessage(Encoding.ASCII.GetString(buffer)); // Отправка пакета. NW.Send(mes, stream); // Получение подтверждения. while (true) { resp = NW.Recieve(stream); if (resp.Get_Data() != "") { resp = new ResponseMessage(string.Empty); break; } } } } while (btscpd > 0); // Для устранения ошибки преждевременного обрывания. Thread.Sleep(50); // Отправка уведомления о конце файла. mes = new EndMessage("End of file"); NW.Send(mes, stream); } } else { using (NetworkStream stream = clnt.GetStream()) { mes = new ErrorMessage("File is not exsiting"); NW.Send(mes, stream); } } }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { ErrorMessage er = new ErrorMessage("LOL"); NW.Send(er, clnt.GetStream()); Thread.Sleep(1500); }
private void newSessionToolStripMenuItem_Click(object sender, EventArgs e) { ErrorMessage er = new ErrorMessage("LOL"); NW.Send(er, clnt.GetStream()); Thread.Sleep(1500); clnt = new TcpClient(adress, 13000); listView1.Items.Clear(); panel1.Visible = true; }
// Раскрыть пакет. public Message Decrypt(byte[] b) { // Возвращаемое значение. Message mes; // Строка, полученная из полученного массива байт. string str = Encoding.ASCII.GetString(b); // Тип сообщений. if (str[0] != '\0') { int type = int.Parse(str[0].ToString()); int border = str.IndexOf('\0'); if (border==(-1)) { border = str.Length; } if (type != -1) { // Строка данных. string assis = str.Substring(1, border - 1); // Определение типа сообщения. switch (type) { case 0: mes = new Inform_of_Down_Message(assis); break; case 1: mes = new Inform_of_Rec_Message(assis); break; case 2: mes = new ListMessage(assis); break; case 3: mes = new RequestMessage(assis); break; case 4: mes = new FilePartMessage(assis); break; case 5: mes = new EndMessage(assis); break; case 6: mes = new ResponseMessage(assis); break; case 7: mes = new ErrorMessage(assis); break; case 8: mes = new HubInformMessage(assis); break; default: mes = new Message(assis); break; } } else mes = new Message(string.Empty); return mes; } else return new Message(string.Empty); }