Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Builder Перекодировка текстовых файлов в ASCII и обратно Всем привет. Есть код перекодировки из обычного в ASCII, сейчас мне необходимо переделать ASCII в обычный Подскажите, пожалуйста, как это сделать? { std::ostringstream oss; std::string s1, s2; s1=Memo1->Text.c_str(); for (int j = 0; j < s1.length(); ++j) oss << std::hex << std::setw(2) << std::setfill('0') << (int)s1 << " "; s2 = oss.str(); https://www.cyberforum.ru/ cpp-builder/ thread1408976.html Вывести сумму платежей и общее количество выданных книг C++ Builder
В библиотеке школы, книги выдаются читателям из читального зала за плату – 30 руб. А учителям школы - бесплатно. Необходимо написать программу, которая выводила бы сумму платежей и общее количество выданных книг. В конструкторе происходит задание начальных значений суммы и начальное общее количество выданных книг. Метод solve() подсчитывает количество книг выданных бесплатно. Метод solve1()...
C++ Builder TShape, TImage или TPaintbox - что выбрать? (Рисование кругов, данные из файла) https://www.cyberforum.ru/ cpp-builder/ thread1408747.html
Здравствуйте, имеется файл с данными, для отрисовки окружностей (Например: круг1: 255,255,0,0 etc). Каким способом лучше рисовать это всё? TShape, TImage или TPaintbox? При том, что в следствии надо работать с каждым кругом отдельно (например: при наведении на определенный круг - он меняет цвет; Если круг1 и круг3 рядом - залить их одним цветом \ удалить их и т.д.). Как же это всё лучше...
C++ Builder Найти ближайший текст https://www.cyberforum.ru/ cpp-builder/ thread1408675.html
Здравствуйте! Никак не получается пройти текст назад до ближайшей фразы. Знаю, что по символу можно найти с помощью функции strrchr. Какая функция позволит определить фразу? Спасибо!
Принтер этикеток TLP 2824 C++ Builder
Имеем принтер этикеток фирмы Zebra модель TLP 2824. Хотчу написать программку, которая бы распечатывала с помощью этого принтера штрих-код. В программе завел объект типа TPrinter. С помощью метода Textout() распечатываю текст. А как распечатать штрих-код? И как программно настроить свойства принтера. Ширину печати и т.д.
C++ Builder Игра крестики - нолики https://www.cyberforum.ru/ cpp-builder/ thread1408415.html
Всем добрый день , вобщем сделал я почти игру крестики-нолики = уже не один день мучаясь .... Просто на днях сдавать надо но немного не доработал и незнаю как . Надо сделать что-бы компьютер определял ничью и добавить игру не просто сам с собой - а с компьютером . Если кто может помочь - буду очень вам рад = сам код изначально делал на Rar studio . Вот сама работа ;)
C++ Builder Создать пусой файла с помощью SaveDialog Как с помощью SaveDialog создать txt файл указать имя и указать путь сохранения https://www.cyberforum.ru/ cpp-builder/ thread1408308.html Еще один перевод из Delphi в C++Builder C++ Builder
Доброй ночи. Не примите за грубость, всего лишь странствую и ищу помощи. С радостью разбираю и вспоминаю дэлфи и си...но поджимают сроки. Будьте добры - гляньте. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Grids, Spin, ShellAPI, ComCtrls, Math; type MAS = array of real;
C++ Builder Форма окна и других объектов Здравствуйте, у меня такой вопрос. Можно ли изменить форму окна? Например сделать его круглым. И если можно, то как? https://www.cyberforum.ru/ cpp-builder/ thread1408252.html C++ Builder Вывод таймера в формате мин.сек Всем привет, у меня не большой вопрос мне нужно вывести отсчет таймера в таком формате: 20 мин 30 сек, а у меня выводится только в секундах:( Вот код: TForm1 *Form1; int TimeRemain; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { https://www.cyberforum.ru/ cpp-builder/ thread1408120.html
C++ Builder Создание и разрушение экземпляров класса
Здравствуйте. Мне нужно разработать программу на c ++ Builder в которой на основе структур, создается и разрушаются объекты класса согласно варианта (работник (Имя -char * возраст-int, стаж-int))
C++ Builder Как работать с Shape? https://www.cyberforum.ru/ cpp-builder/ thread1407935.html
Недавно начал изучать C++ Builder. Объясните мне, как работать с Shape?. То есть я создаю шейп(допустим круг), как мне к нему прикрепить другие фигуры(ромб, квадрат), чтобы они могли двигаться, вращаться как одно целое, но цвет менять каждый по разному. Возможно написал какой-то бред, тогда просто объясните как пользоваться им, а то в интернете нет достойной информации. Заранее спасибо.
1 / 1 / 0
Регистрация: 23.03.2015
Сообщений: 14
03.04.2015, 23:06  [ТС] 0

Передача файлов по локальной сети - C++ Builder - Ответ 7431175

03.04.2015, 23:06. Показов 7197. Ответов 3
Метки (Все метки)

Ответ

не работает вот рабочий источник
Очень часто возникают вопросы по работе с TServerSocket и TClientSocket, а толкового описания работы с ними нету. Максимум что можно найти в Интернете - исходники чата и то для Delphi. Поэтому, чтобы понять принцип работы компонентов TClientSocket и TServerSocket в С++, предлагаю написать программу, которая будет осуществлять файловый трансфер.

В общих чертах передача файлов через сокеты выглядит следующим образом: вся информация передается пакетами, и если в одном из пакетов встречается #file - это значит, что пришел заголовок файла с последующей информацией о нем (имя, размер) и клиент должен принимать файл указанного размера. В чистом виде заголовок файла выглядит так: file#filename#filesize#. Когда клиент принимает такой заголовок, он обрабатывает его(выделяет имя файла и его размер), создает буфер размером filesize и в него пишет всю последующую информацию. Когда размер переданной информации равен размеру файла, посылает на сервер команду "end", сервер обрабатывает эту команду и закрывает поток.

Итак, начнем мы с того, что определимся, кто будет посылать файл, а кто принимать. В моем примере - Сервер отправляет файл, а клиент принимает, все просто, ничего сложного здесь нету. Дальше нужно оформить внешний вид клиента и сервера.
Сейчас будем писать сервер - он будет отправлять файлы.
Сервер:

На форме: OpenDialog1 (TOpenDialog), Server (TServerSocket), Memo1 (TMemo) и две кнопки.

Сначала настроим Server:
C++
1
2
Port = 1001 ; // Порт по которому будет работать и клиент и сервер
Active = false ; // Пока неактивен
Эти настройки можно выбрать в Object Inspector'е.

Перейдем на вкладку Events и опишем подключение и отключение клиента:

В OnAccept:
C++
1
Memo1->Lines->Add("К Вам подключились ;");
Для OnError:
C++
1
2
ErrorCode = 0 ;
ShowMessage("Server Error");
Теперь напишем обработчик для нажатия кнопки запуска сервера:
C++
1
2
3
Server->Active = true ;
Server->Open() ;
Memo1->Lines->Add("Создан сервер.");
Теперь нужно создать поток, который мы и будем передавать клиенту:
TMemoryStream *MS = new TMemoryStream ;

А теперь подходит время к самому главному в описании сервера - передачи файла клиенту. Пишем в обработчике кнопки Send (Отправить файл):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void *P; // указатель на файл
int Size; // размер
if( OpenDialog1->Execute() )
{
 MS->LoadFromFile( OpenDialog1->FileName ); // выбираем файл 
 Memo1->Lines->Add( "Загрузили требуемый файл в поток..." ); // заполняем лог 
}
Server->Socket->Connections[0]->SendText( "file#" + OpenDialog1->FileName + "#" + IntToStr( MS->Size ) + "#" ); 
// отправляем заголовок
 
Memo1->Lines->Add ( "Послали заголовок" );
MS->Position = 0 ; // Устанавливаем поток в начальную позицию ;
P = MS->Memory ; // присваиваем указателю поток файла
Size = Server->Socket->Connections[0]->SendBuf( P , MS->Size ); // отправляем буфер клиенту; Size
  //равно размеру отправленной информации
Memo1->Lines->Add( "Отправлено: " + IntToStr( Size ) + " из " + IntToStr( MS->Size ) ); // заполняем лог
С отправкой все в порядке, но серверу еще необходимо обработать команду "end", которая придет тогда, когда клиент примет файл. Для этого в OnClientRead пишем:
C++
1
2
3
4
5
if(Server->Socket->Connections[0]->ReceiveText()=="end") // если клиент прислал команду "end"
{
 Memo1->Lines->Add("Клиент принял файл"); // записываем в лог
 MS->Clear() ; // Очищаем поток
}
С сервером и отправкой файла все готово, дальше нужно написать клиента, который бы принимал поток пакетов от сервера. Чем мы и займемся.
Клиент:

Для программы-клиента основной задачей является получение информации о файле, который передает клиент и получение, и сохранение самого файла. Итак, на форме - Client (TClientSocket) , Memo1 (TMemo), SaveDialog1 (TSaveDialog) и кнопка соединения - Button1.

Снова начнем с того, что настроим Client (TClientSocket1):
C++
1
2
3
4
Port = 1001 ; // Клиент и сервер должны работать на одинаковых портах 
Active = false ; // Пока неактивен
Address = 127.0.0.1 ; // Адрес укажем пока свой, что б протестировать работу сервера и клиента локально
Host = 127.0.01 ;
Далее, объявим переменные, которые нам будут необходимы:

В *.h-файле проекта, в секции private объявим:
C++
1
2
private: 
 AnsiString Name;
После этого в *.cpp файле объявляем:
C++
1
2
3
4
5
TMemoryStream *MS = new TMemoryStream ; // создаем поток под принимаемый файл
void Write( AnsiString Text ); // ф-я записи получаемой информации в поток
int Size ; // размер передаваемого файла
bool Receive ; // передаем ли мы на данный момент файл
AnsiString FileName ; // имя файла
Следующим шагом создания клиента - будет описание функции Write. Она должна сохранять получаемую информацию в файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Write( AnsiString Text )
{
 if(MS->Size < Size) // если мы еще принимаем файл и размер потока меньше размера файла
 {
  MS->Write( Text.c_str() , Text.Length() ); // записываем в поток
  Form1->Memo1->Lines->Add( "Принимаем данные..." ); // пишем лог
 }
 if(MS->Size == Size) // если файл принят и размер потока соответствует размеру файла
 {
  Receive = false ; // останавливаем режим передачи
  MS->Position = 0 ; // переводим каретку потока в начало
  Form1->Client->Socket->SendText( "end" ); // пишем серверу, что мы приняли файл
  CreateDir( "Downloads" ); // создаем папку для сохраненных файлов
  MS->SaveToFile( "Downloads\\"+FileName ); // сохраняем туда наш файл
  MS->Clear() ; // освобождаем поток
  Size = 0 ;
  Form1->Memo1->Lines->Add("Файл принят !"); // пишем в лог что файл принят
 }
}
Далее, важно еще правильно описать событие OnRead, вот как оно должен выглядеть:
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
void __fastcall TForm1::ClientRead( TObject *Sender,
  TCustomWinSocket *Socket )
{
 AnsiString Rtext ; // текст, который посылает сервер
 Rtext = Client->Socket->ReceiveText() ;
 if( Receive == true ) // если мы в режиме передачи файла, то
 {
  Write( Rtext ); // записываем его в поток
 }
 else // если нет , то
 {
  Memo1->Lines->Add( "Приняли текст :" + Rtext ); // пишем в лог все что принимаем от сервера
  if(Rtext.SubString( 0,Rtext.Pos("#")-1) == "file" ) // Если это строка типа 
  // file#filename#filesize#, то начинаем парсерить полученную информацию :
  {
  Rtext.Delete( 1 , Rtext.Pos( "#" ) ) ; // удаляем слово file
  Name = Rtext.SubString( 0 , Rtext.Pos( "#" ) -1 );// Определяем имя файла
  FileName = Name.SubString( Name.LastDelimiter( "\\" ) + 1 , Name.Length() );
  // Выделяем чистое имя файла , например с c:\\test.txt , берем test.txt
  Rtext.Delete( 1 , Rtext.Pos( "#" ) ); // Удаляем последний разделитель
  Size = StrToInt( Rtext.SubString( 0 , Rtext.Pos( "#" ) - 1) ) ; // Определяем размер файла
  Rtext.Delete( 1 , Rtext.Pos( "#" ) ); // Удаляем последний разделитель
  Memo1->Lines->Add( "Размер файла: " + IntToStr( Size ) + " байт" ); // Выводим размер файла в лог
  Memo1->Lines->Add( "Имя файла: " + Name ); // Выводим имя файла в лог
  Receive = true; 
  // Переводим сервер в режим приёма файла
   
  }
 }
}
Все самое страшное позади, и теперь осталось только описать события OnConnect и OnError:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::ClientConnect( TObject *Sender,
  TCustomWinSocket *Socket )
{
 Memo1->Lines->Add( "Вы присоеденились ;" );
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ClientError( TObject *Sender,
  TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode )
{
 ErrorCode = 0;
 ShowMessage( "Client Error" );  
}
А так же написать обработчик для кнопки соединения:
C++
1
2
3
4
5
void __fastcall TForm1::Button1Click( TObject *Sender )
{
 Client->Open() ; // открываем 
 Memo1->Lines->Add( "Коннектимся..." );
}
Вот и все готово, теперь можно протестировать, что же у нас получилось. Все принятые файлы клиент сохранят в папку Downloads.


Вернуться к обсуждению:
Передача файлов по локальной сети C++ Builder
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2015, 23:06
Готовые ответы и решения:

Передача сообщений по локальной сети
Может кто подкинуть простейший пример передачи текстовых сообщений хотябы между 2 компами

Передача нажатия клавиши по локальной сети.
Добрый день. Есть потребность написать приложение с сервером и клиентом. Два клиента подключаются к...

Передача сообщения по локальной сети (indy)
кто знает объясните пожалуйста разницу между TClientSocket-TServerSocket и компонентами indy...

Передача файла по локальной сети с помощью сокетов
Как организовать передачу файла по локальной сети с помощью сокетов? Что нужно писать в программе...

3
03.04.2015, 23:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2015, 23:06
Помогаю со студенческими работами здесь

Передача сообщения или переменной по локальной сети
долго гуглил, но так ничего и не получается реализовать работает код вот от сюда: Как послать...

Передача файлов по локальной сети
Подскажите пожалуйста, какими способами (легче всего) осуществить передачу файлов (синхронизацию...

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

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru