С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 40
1

Сетевое приложение в Delphi 7

29.11.2010, 19:21. Показов 3221. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! я Delphi знаю на "хорошо" и первый раз столкнулась с такой проблемой: нужно создать простейшее сетевое приложение (любое-для примера), т.е. чтобы само приложение находилось на сервере, ну а считывалось, естетвенно, с других компьютеров.
Можно ссылочку на какой-нибудь демонстрационный пример, либо кусок кода...

кароч, первый раз с этим столкнулась, не знаю с чего даж и начать!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2010, 19:21
Ответы с готовыми решениями:

Сетевое приложение под Windows 8 выбор БД
Добрый день. Требуется создать сетевое приложение под Windows 8 (на сервере Windows Server 2012),...

Сетевое приложение
Привет всем.Можете кто нибудь обьяснить или даже показать на примере(буду признателен),как сделать...

Сетевое приложение на С#
Здравствуйте! Помогите, пожалуйста. Мне надо создать сетевую программу на C#, чтобы ее можно было...

Сетевое приложение с БД
Здравствуйте уважаемые гуру программирования! Начинаю осваивать сетевое программирование, возник...

2
4 / 4 / 0
Регистрация: 14.05.2010
Сообщений: 14
30.11.2010, 15:17 2
я что то суть недоконца понял...
пример работы сокетов....непомню где именно нашел... но искал пример для своего проекта.
это пример работы клиента
Pascal
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    mmoMsg: TMemo;
    pnl1: TPanel;
    mmoSendText: TMemo;
    btn1: TButton;
    ClientSocket1: TClientSocket;
    dlgOpen1: TOpenDialog;
    btn2: TButton;
    btn3: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    edtPort: TEdit;
    edtIP: TEdit;
    btn4: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
   MS:TMemoryStream;       //Для файлика буфер
implementation
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);
var
Size: integer;                                        //размерчик
P: ^Byte;                                             //указатель в память
begin
if dlgOpen1.Execute then                              //если выбран файл то...
begin
MS.LoadFromFile(dlgOpen1.FileName);                   // Загружаем файл в буфер
                                                      // Посылаем информацию о файл (команда # название # размер)
ClientSocket1.Socket.SendText('file#'+ ExtractFileName(dlgOpen1.FileName) +'#'+IntToStr(MS.Size)+'#');
MS.Position := 0;                                     // Переводим каретку в начало файла
P := MS.Memory;                                       // Загружаем в переменную "P" файл
ClientSocket1.Socket.SendBuf(P^, MS.Size);             // Посылаем файл
 
end;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(mmoSendText.Text);       //посылаем сообщение
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
 ClientSocket1.Port := StrToInt(edtPort.text);        //устанавливаем порт
 ClientSocket1.Address := edtIP.text;                 //IP адресс сервера  если на одном компе можно просто 192.168.1.2
 ClientSocket1.Active :=True;                         //Коннектимся
end;
 
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Form1.Caption := 'Подключились к ' + edtIP.text;      //Если подключились покажем это
end;
 
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
form1.Caption := 'Связь разорвана';                  //Связь разорвана =(
end;
 
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
 ShowMessage('Ошибка №' +  IntToStr(ErrorCode));    //Возникла ошибка
 ErrorCode :=0;                                     //Забъем на нее
end;
 
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  mmoMsg.Lines.Add('[Server]::' + Socket.ReceiveText); //Нам сообщенице
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
MS.Free;   //Уничтожаем буфер
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
MS := TMemoryStream.Create; // Создаём буфер для файла
end;
 
procedure TForm1.btn4Click(Sender: TObject);
var Buffer,Len:integer;
begin
  Buffer := StrToInt(mmoSendText.text);
ClientSocket1.Socket.SendBuf(Buffer,Length(mmoSendText.Text));
end;
 
end.



а вот пример работы сервера:
Pascal
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ScktComp, ComCtrls;
 
type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    mmoMsg: TMemo;
    mmoSendText: TMemo;
    pnl2: TPanel;
    btn3: TButton;
    btn1: TButton;
    edt1: TEdit;
    lbl1: TLabel;
    pb1: TProgressBar;
    procedure btn1Click(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1Accept(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure btn3Click(Sender: TObject);
    procedure Writing(Text: string);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
    fName:string;     //Имя файла
  fSize: integer;     // Размер файла
  Receive: boolean;   // Режим клиента
  MS: TMemoryStream;  // Буфер для файла
implementation
 
{$R *.dfm}
 
procedure TForm1.Writing(Text: string);
begin
if MS.Size < fSize then                   // Если принято байт меньше размера файла, то...
MS.Write(Text[1], Length(Text));          // Записываем в буфер
pb1.Position := MS.Size*100 div fSize;    // Выводим прогресс закачки файла
if MS.Size = fSize then                   // Если файл принят, то...
begin
Receive := false;                         // Переводим клиента в нормальный режим
MS.Position := 0;                         // Переводим каретку в начало буфера
if not(DirectoryExists(ExtractFilePath(ParamStr(0)) + '\' + 'Хранилище Файлов')) then CreateDir(ExtractFilePath(ParamStr(0)) + '\' + 'Хранилище Файлов');
MS.SaveToFile(ExtractFilePath(ParamStr(0)) + '\' + 'Хранилище Файлов\' + fName); // Сохраняем файл
ServerSocket1.Socket.Connections[0].SendText('/dend'); // Посылаем команду "/dend", то есть файл принят
mmoMsg.Lines.Add('[Client]::Принят файл ' + fName);     //Запишем в сообщения то что мы приняли файл
end;
end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
 ServerSocket1.Port := StrToInt(edt1.Text);    //Устанавливаем порт
 ServerSocket1.Active :=True;                  //Включаем сервер на прослушку порта
 Form1.Caption := 'Ожидание Подключения'       //Простая фармальность
end;
 
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var sMessage:string;Buffer:Integer;
  begin
    Socket.ReceiveBuf(Buffer,Socket.ReceiveLength);
    if Buffer <> 0 then mmoMsg.Lines.Add('[ClientBuf]::'+IntToStr(Buffer))
    else
    begin
    sMessage := Socket.ReceiveText;
    if Receive then                 // Если клиент в режиме приёма файла, то...
    Writing(sMessage)               // Записываем данные в буфер
    else                            // Если клиент не в режиме приёма файла, то...
    begin                           //начинается блок команд
    if Copy(sMessage, 0, Pos('#', sMessage) -1) = 'file' then // Если это файл, то...
    begin MS := TMemoryStream.Create;                         // Создаём буфер для файла
      Delete(sMessage, 1, Pos('#', sMessage));               // Определяем имя файла
      fName := Copy(sMessage, 0, Pos('#', sMessage) -1);     // Определяем имя файла
      Delete(sMessage, 1, Pos('#', sMessage));              // Определяем размер файла
      fSize := StrToInt(Copy(sMessage, 0, Pos('#', sMessage) -1)); // Определяем размер файла
      Delete(sMessage, 1, Pos('#', sMessage));              // Удаляем последний разделитель
      Receive := true;                                    // Переводим сервер в режим приёма файла
      mmoMsg.Lines.Add('[Client]::Пришел файл ' + fName); //запишем в сообщения о том что нам послали файл
      mmoMsg.Lines.Add('[Client]::Размер Файла ' + IntToStr(fSize));  //запишем размер файла
      Writing(sMessage); // Записываем данные в буфер
    end
    else mmoMsg.Lines.Add('[Client]:' + sMessage);        //нам пришло текстовое сообщение,так заишем же его
    end;
    end;
end;
 
procedure TForm1.ServerSocket1Accept(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Caption := 'Клиент Подключен';             //для наглядности покажем что к нам подключился клиент
end;
 
procedure TForm1.btn3Click(Sender: TObject);
begin                                        //что такое Connections[0] смотри в конце Юнита
  ServerSocket1.Socket.Connections[0].SendText(mmoSendText.Text);  //Посылаем клиенту текст
  mmoSendText.Clear;                              //Очищаем поле ввода текста
end;
 
procedure TForm1.ServerSocket1ClientError(Sender: TObject;   //событие генерируется когда происходит ошибка
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
 ShowMessage('Ошибка #' + IntToStr(ErrorCode));   //выводим ошибку
 ErrorCode:=0;                                    //сделаем вид типа ошибки нет,чтобы Windows  не вызвала её
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
MS.Free; // Убиваем буфер
end;
 
end.
2
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 40
01.12.2010, 10:48  [ТС] 3
блин..темный лес пока для меня!
пасибо за код!

пишешь что не понял суть.Вот подробней: например на серваке храница база сотрудников предприятия и с разных отделов предприятия (отдел кадров, УИТ и др) пользуюца этой базой!
То что ты написал, это подойдет для выше написанной реализации?
0
01.12.2010, 10:48
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2010, 10:48
Помогаю со студенческими работами здесь

Сетевое приложение
Люди поделитесь пожалуйста кто-нибудь сетевым приложением каким нибудь!

Сетевое приложение
Всем привет, нужно написать программу, суть которой в том, что со смартфона(android) вводятся...

сетевое приложение
есть сервер и клмент пока общаются через localhost... клиент посылает сообщение сервер на него...

Qt Сетевое приложение
Разбираюсь с сетями, передачами данных и т.п. Использую для этого QT Creator. Делаю на C++ ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru