Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2008, 18:32   #1
koyot
 
Регистрация: 24.12.2007
Сообщений: 7
По умолчанию помогите поправить!

Вот текст проги чата, взял на faq'е и многое переделал, все работает, помогите сделать чтоб работало не только для одного клиента а для любого количества (ну или хотябы определенного) никак нипойму что сделать! (на сервер приходят сообщения со всех клиентов, а наоборот-нет) помогите плз!!!


Код:
procedure TForm1.FormCreate(Sender: TObject);
var
list,inf:textfile;
pt,hs,nek:string;
begin
 AssignFile(inf,'list.pcht');
 reset (inf);
   readln (inf,nek);
   readln (inf,pt);
   readln (inf,hs);
   closeFile(inf);
PortEdit.Text:=pt;
//^порт по умолчанию-777
HostEdit.Text:=hs;
//^ ип по умолчанию (сам себя)
NikEdit.Text:=nek;
TextEdit.clear;
ChatMemo.Lines.Clear;
end;

procedure TForm1.ServerBtnClick(Sender: TObject);
begin
//выбран режим сервер
If ServerBtn.Tag=0 then
Begin
 ClientBtn.Enabled:=False;
HostEdit.Enabled:=False;
PortEdit.Enabled:=False;
//блокируем элементы, ненужные для работы сервера
ServerSocket.Port:=StrToInt(PortEdit.Text);
ServerSocket.Active:=True;
ChatMemo.Lines.Add('Сервер чата создан вами');
 ServerBtn.Tag:=1 ;
 ServerBtn.Caption:='ОТключить';
      end
 else
Begin
     //разблочили кнопки, ненужные серверу
ClientBtn.Enabled:=True;
HostEdit.Enabled:=True;
PortEdit.Enabled:=True;
// стоп серваку\/
ServerSocket.Active:=False;
ChatMemo.Lines.Add('ваш сервер остановлен.');
ServerBtn.Tag:=0;
//таг прежний
ServerBtn.Caption:='Создать сервер';
end;
end;










procedure TForm1.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ChatMemo.Lines.Add('К вам подключился собеседник');
end;

procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 ChatMemo.Lines.Add('Собеседник отключился ггг');
end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ChatMemo.Lines.Add(Socket.ReceiveText());
//добавляем пришедшую месагу
end;

procedure TForm1.SendBtnClick(Sender: TObject);
begin

// проверка режима
If ServerSocket.Active=True then
// отправляем месаг (о т.к чат прив для 2х человек, конект 1 а у нас серв)
ServerSocket.Socket.Connections[0].SendText('['+TimeToStr(Time)+']  ['+NikEdit.Text+']: '+TextEdit.Text)


else
// отправляем сообщение с клиента
ClientSocket.Socket.SendText('['+TimeToStr(Time)+']  ['+NikEdit.Text+']: '+TextEdit.Text);

ChatMemo.Lines.Add('['+TimeToStr(Time)+']  ['+NikEdit.Text+']: '+TextEdit.Text);
  TextEdit.clear


 end;





procedure TForm1.ClientBtnClick(Sender: TObject);
begin
If ClientBtn.Tag=0 then
Begin
// ненужное лочим заблокируем
ServerBtn.Enabled:=False;
HostEdit.Enabled:=False;
PortEdit.Enabled:=False;
// запишем указанный
ClientSocket.Port:=StrToInt(PortEdit.Text);
// запишем хост и адрес
ClientSocket.Host:=HostEdit.Text;
ClientSocket.Address:=HostEdit.Text;
ClientSocket.Active:=True;
ClientBtn.Tag:=1;
// меняем надпись клавиши
ClientBtn.Caption:='отключица';
end
else
Begin
// разлочим
ServerBtn.Enabled:=True;
HostEdit.Enabled:=True;
PortEdit.Enabled:=True;
// закрываем клиента
ClientSocket.Active:=False;
// выводим сообщение в ChatMemo
ChatMemo.Lines.Add('Отключен от сервера');
// возвращаем тэгу исходное значение
ClientBtn.Tag:=0;
// возвращаем исходную надпись клавиши
ClientBtn.Caption:='Подключиться';
end;
end;





procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin

ChatMemo.Lines.Add(Socket.ReceiveText());
end;
 procedure TForm1.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin

ChatMemo.Lines.Add('Подключен к серверу.');
end;







procedure TForm1.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// добавим в ChatMemo сообщение о потере связи
ChatMemo.Lines.Add('Нет такого сервера');
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
application.Minimize;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ChatMemo.Lines.Clear;
end;

end.
koyot вне форума Ответить с цитированием
Старый 10.02.2008, 22:38   #2
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

на сервере создай примерно такую запись
Код:
type RMyRec=record
  Ip: String[15];
  Reciver : String;
  Message : String;
  end;
IP- айпишник
Reciver - хост (если не определен IP)
Message - сообщение естественно
я с этой пробемой так справился
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 11.02.2008, 16:36   #3
koyot
 
Регистрация: 24.12.2007
Сообщений: 7
По умолчанию

Создал переменную, считающую количество клиентов(вместо 0), но тогда сервер не отсылает сообщения, но принимает, и клиенты не видят сообщений друг друга


Код:
ServerSocket.Socket.Connections[0].SendText('['+TimeToStr(Time)+']  ['+NikEdit.Text+']: '+TextEdit.Text)
koyot вне форума Ответить с цитированием
Старый 11.02.2008, 16:56   #4
koyot
 
Регистрация: 24.12.2007
Сообщений: 7
По умолчанию

Все разобрался, теперь сервер отправляет месаги на все клиенты, но осталось сделать чтоб клиенты видели месаги друг друга!!!
я конешно сам пытаюсь, но можт есть идеи?
koyot вне форума Ответить с цитированием
Старый 13.02.2008, 18:46   #5
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

есть пример, писал для демонстрации использования клиент-сервер БД
Вложения
Тип файла: rar src.rar (68.1 Кб, 16 просмотров)
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите поправить код SANTA_KLAUD Общие вопросы Delphi 5 30.05.2008 09:01