Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 38
1

Программа для обмена сообщениями по локальной сети

15.05.2014, 21:38. Показов 1613. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо создать прогрпммы для обмена сообщениями по локальной сети. Не могу понять в чем дело((( при компеляции выдает ошибку(смотрите выделенный фрагмент) - {Если соединение уже установлено, то обрываем его}
if ClientSocket1.Active then
ClientSocket1.Close;
Delphi
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
unit main;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ScktComp;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Panel3: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    ListBox1: TListBox;
    Button2: TButton;
    Button3: TButton;
    CheckBox1: TCheckBox;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Lookup(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  nickname: string;
 
implementation
 
uses conn;
 
{$R *.DFM}
 
procedure TForm1.Button2Click(Sender: TObject);
 var do_connect: Boolean;
     host,port: string;
begin
  {Показываем окно установки соединения с сервером}
  Form2 := TForm2.Create(Application);
  {do_connect = True, если была нажата кнопка Connect}
  do_connect := (Form2.ShowModal = mrOk);
  {заполнение переменных до того, как мы уничтожим форму}
  host := Form2.Edit1.Text;
  port := Form2.Edit2.Text;
  nickname := Form2.Edit3.Text;
  {Уничтожаем форму}
  Form2.Free;
  {Если была нажата кнопка Cancel, то уходим отсюда}
  if not do_connect then
   Exit;
 [COLOR="Red"][B] {Если соединение уже установлено, то обрываем его}
  if ClientSocket1.Active then
   ClientSocket1.Close;
  {Устанавливаем свойства Host и Port}
  ClientSocket1.Host := host;
  ClientSocket1.Port := StrToInt(port);
  {Пытаемся соединиться}
  ClientSocket1.Open;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  {Закрываем соединение (если оно установлено)}
  if ClientSocket1.Active then
   ClientSocket1.Close;
end;[/B][/COLOR]
 
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  {Если произошла ошибка, выводим ее код в Memo1}
  {Insert вставляет строку в указанную позицию (в данном случае - 0 - в начало)}
  Memo1.Lines.Insert(0,'Socket error ('+IntToStr(ErrorCode)+')');
end;
 
procedure TForm1.ClientSocket1Lookup(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  {Сообщаем о том, что идет поиск хоста}
  Memo1.Lines.Insert(0,'Looking up for server...');
end;
 
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  {соединяемся...}
  Memo1.Lines.Insert(0,'connecting...');
end;
 
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  {соединились!}
  Memo1.Lines.Insert(0,'connected!');
end;
 
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  {отсоединились :(}
  Memo1.Lines.Insert(0,'disconnected');
end;
 
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
 var s,from_,to_: string;
begin
  {присваиваем s полученную от сервера строку}
  s := Socket.ReceiveText;
  {Если сервер посылает нам User List}
  if Copy(s,1,2) = '#U' then begin
   Delete(s,1,2);
   {Чистим ListBox1}
   ListBox1.Items.Clear;
   {Добавляем по одному юзеру в список. Имена юзеров разделены знаком ";"}
   while Pos(';',s) > 0 do begin
    ListBox1.Items.Add(Copy(s,1,Pos(';',s)-1));
    Delete(s,1,Pos(';',s));
   end;
   Exit;
  end;
  {Если нам прислали общее сообщение (видимое для всех юзеров)}
  if Copy(s,1,2) = '#M' then begin
   Delete(s,1,2);
   {Добавляем его в Memo1}
   Memo1.Lines.Insert(0,Copy(s,1,Pos(';',s)-1)+'> '+
                        Copy(s,Pos(';',s)+1,Length(s)-Pos(';',s)));
   Exit;
  end;
  {Если нам прислали запрос на наше имя юзера}
  if Copy(s,1,2) = '#N' then begin
   {Посылаем ответ}
   Socket.SendText('#N'+nickname);
   Exit;
  end;
  {Если нам прислали приватное сообщение (или не нам :) )}
  if Copy(s,1,2) = '#P' then begin
   Delete(s,1,2);
   {Выделяем в to_ - кому оно предназначено}
   to_ := Copy(s,1,Pos(';',s)-1);
   Delete(s,1,Pos(';',s));
   {Выделяем в from_ - кем отправлено}
   from_ := Copy(s,1,Pos(';',s)-1);
   Delete(s,1,Pos(';',s));
   {Если оно для нас, или написано нами - добавляем в Memo1
    (иногда полезно убрать этот оператор if :) )}
   if (to_ = nickname)or(from_ = nickname) then
    Memo1.Lines.Insert(0,from_+' (private) > '+s);
   Exit;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 var s: string;
begin
  {Если мы хотим послать приватное сообщение, но не выбрали адресата -
   нас покарают замечанием :) и выгонят из обработчика}
  if (CheckBox1.Checked)and(ListBox1.ItemIndex < 0) then begin
   ShowMessage('Сначала вы должны выбрать пользователя в списке пользователей!');
   Exit;
  end;
  {Если это приватное сообщение}
  if CheckBox1.Checked then
   s := '#P'+ListBox1.Items[ListBox1.ItemIndex]+';' {добавляем спец.команду и адресат}
  else {А если не очень приватное?}
   s := '#M'; {Просто спец.команду}
  {Добавляем наше имя (от кого) и само сообщение}
  s := s+nickname+';'+Edit1.Text;
  {Посылаем все это добро по сокету}
  ClientSocket1.Socket.SendText(s);
  {И снова ждем ввода в уже чистом TEdit-е}
  Edit1.Text := '';
  ActiveControl := Edit1;
end;
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  {Если была нажата Enter (для тех, кто с мышами не дружит) - тоже не
   отказываемся послать сообщение}
  if Key = VK_RETURN then
   Button1.Click;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2014, 21:38
Ответы с готовыми решениями:

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

Программа для мгновенного обмена сообщениями
Скажи, пожалуйста, если писать программу для обмена через Интернет, а не по локальной сети. То что...

Обмен сообщениями в локальной сети
Допустим есть два компьютера соединенных локальной сетью, как они могут обмениваться...

Поднять FTP сервер для обмена файлами по локальной сети
Сейчас у каждого сотрудника на компьютере есть расшаренная на полный доступ (чтение и запись) папка...

3
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
15.05.2014, 22:39 2
Цитата Сообщение от axelvo Посмотреть сообщение
ClientSocket1
А это что за зверь?
0
12 / 12 / 6
Регистрация: 15.08.2011
Сообщений: 184
16.05.2014, 01:40 3
А нельзя использовать компоненты Indy?
p.s я на них писал чат
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
16.05.2014, 02:01 4
Цитата Сообщение от Hunter342 Посмотреть сообщение
А нельзя использовать компоненты Indy?
Можно, хотя я и не люблю Инди. Но нужно хоть что-то знать, чтобы копипаст был понятен и полезен.
0
16.05.2014, 02:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2014, 02:01
Помогаю со студенческими работами здесь

Обмен сообщениями (по локальной сети) используя компоненты indy
искал в интернете и нашел только для delphi а вот для c++ ничего не нашел скиньте сылочку на...

Обработка ошибки подключения в программе обмен сообщениями по локальной сети
Добрый день. Нужна помощь эксперта. Пишу программу, обмен сообщениями в локальной сети....

Модуль обмена по локальной сети!
1.Модель обработки данных - функция удаления узла из бинарного дерева поиска 2. Выполняемая...

Программа для n пользователей в локальной сети
Пытаюсь писать свою игру. Пока есть стол и карты которые можно по нему перемещать. Требуется...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru