| 
| 
 | Вопрос # 5 414/ вопрос решён / | 
 |  Здравствуйте, эксперты!Я пишу сейчас чат простетский, но возникла "заминка",я сделал по принципу один сервер и много клиентов, отправку сообщений я решил сделать так: Клиент посылает текст на сервер, сервер отображает его в Memo и потом скидывает всем клиентам в том числе и отправителя, но почему то не получаеться, либо проблема в клиенте, либо в сервере, либо в кривых руках :) Вот исходники сервера и клиента если не сложно посмотрите пожалуста.
 Вот сылки на исходники:
 http://dump.ru/file/5268770 - Server.rar
 http://dump.ru/file/5268771 - Client.rar
 
|  |   Вопрос задал: Дмитри3241 (статус: Посетитель)Вопрос отправлен: 16 июня 2011, 07:31
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 16 июня 2011, 10:49; участников в обсуждении: 2. 
|   | Дмитри3241 (статус: Посетитель), 16 июня 2011, 07:45 [#1]:============================= ==Вот если что код сервера.==
 =============================
 unit Server;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, ScktComp, IdBaseComponent, IdComponent,
 IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls,Winsock, Sockets;
 
 type
 TForm1 = class(TForm)
 ServerSocket: TServerSocket;
 Memo1: TMemo;
 StatusBar1: TStatusBar;
 Port: TLabeledEdit;
 Ip: TLabeledEdit;
 TcpClient1: TTcpClient;
 Button1: TButton;
 Button2: TButton;
 procedure FormCreate(Sender: TObject);
 procedure PortChange(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);
 procedure ServerSocketClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
 procedure ServerSocketClientDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
 procedure ServerSocketClientError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 procedure ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 Kk : integer;
 
 implementation
 
 {$R *.dfm}
 
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 ServerSocket.Active:=True;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 begin
 ServerSocket.Active:=False;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 Ip.Text:=(tcpClient1.LocalHostAddr);
 end;
 
 procedure TForm1.PortChange(Sender: TObject);
 begin
 ServerSocket.Port:=StrToInt(Port.Text);
 end;
 //------------------------------------------------------------------------------
 procedure TForm1.ServerSocketClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
 begin
 Memo1.Lines.Add(TimeToStr(time)+\' Клиент подключен.\');
 Kk:=Kk+1;
 StatusBar1.Panels[0].Text:=(\'Кол-во подключенных клиентов: \'+IntToStr(Kk));
 end;
 
 procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
 begin
 Memo1.Lines.Add(TimeToStr(time)+\' Клиент отключен.\');
 Kk:=Kk-1;
 StatusBar1.Panels[0].Text:=(\'Кол-во подключенных клиентов: \'+IntToStr(Kk));
 end;
 
 procedure TForm1.ServerSocketClientError(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 begin
 Memo1.Lines.Add(TimeToStr(time)+\' Ошибка подключения клиента.\');
 StatusBar1.Panels[0].Text:=(\'Кол-во подключенных клиентов: \'+IntToStr(Kk));
 end;
 //------------------------------------------------------------------------------
 //==============================================================================
 //1.Почему сервер не отправляет на клиент, текст посалнный ему толь что клиентом.
 //2.Почему клиент не принимает, текст посланный ему сервером.
 //==============================================================================
 procedure TForm1.ServerSocketClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
 Var
 I : Integer;
 Text : string;
 begin
 Memo1.Lines.Add(Socket.ReceiveText());
 for I := 0 to Kk - 1 do
 Begin
 ServerSocket.Socket.Connections[0].SendText(Socket.ReceiveText());
 End;
 
 end;
 
 end.
 
 ======================
 ==А вот код клиента.==
 ======================
 
 unit Unit1;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ScktComp, StdCtrls, ExtCtrls;
 
 type
 TForm1 = class(TForm)
 GroupBox1: TGroupBox;
 IP: TLabeledEdit;
 Port: TLabeledEdit;
 Label1: TLabel;
 Nik: TLabeledEdit;
 Conect: TButton;
 Disconect: TButton;
 HistoryPanel: TGroupBox;
 MemoChat: TMemo;
 ChatPanel: TGroupBox;
 TextMemo: TMemo;
 SendBtn: TButton;
 Client: TClientSocket;
 Stats: TStatusBar;
 procedure ConectClick(Sender: TObject);
 procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
 procedure ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
 procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
 procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 procedure DisconectClick(Sender: TObject);
 procedure SendBtnClick(Sender: TObject);
 procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 Nik : String;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
 begin
 Stats.Panels[1].Text:=(\'Подключенно.\');
 end;
 
 procedure TForm1.ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
 begin
 Stats.Panels[1].Text:=(\'Соединение...\');
 end;
 
 procedure TForm1.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
 begin
 Stats.Panels[1].Text:=(\'Отключенно.\');
 end;
 
 procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 begin
 Stats.Panels[1].Text:=(\'Ошибка подключения.\');
 end;
 
 procedure TForm1.ConectClick(Sender: TObject);
 begin
 Client.Address:=Ip.Text;;
 Client.Port:=StrToInt(Port.Text);
 Client.Active:=True;
 Nik:=Nik;
 end;
 
 procedure TForm1.DisconectClick(Sender: TObject);
 begin
 Client.Active:=False;
 end;
 
 procedure TForm1.SendBtnClick(Sender: TObject);
 begin
 Client.Socket.SendText(TimeToStr(Time)+\' \'+Nik.Text+\': \'+TextMemo.Text);
 end;
 //==============================================================================
 //1.Почему сервер не отправляет на клиент, текст посалнный ему толь что клиентом.
 //2.Почему клиент не принимает, текст посланный ему сервером?
 //==============================================================================
 procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
 begin
 MemoChat.Lines.Add(Socket.ReceiveText());
 end;
 //==============================================================================
 end.
 Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?» |  
|   | bugmenot (статус: 3-ий класс), 16 июня 2011, 09:10 [#2]:А почему переменная Text не используется? А вместо этого из сокета Kk (почему опять глобальная?) раз читается пустая строка? виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  16 июня 2011, 10:00: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А. 
|   | Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:18 [#3]:Переменная "Kk" это "Количевство Клиентов", да и вообще вопрос был в другом почему клиент не принимает сообщение с сервера, а переменная "Text" исчезнить во время оптимизации кода, я уже и непомню зачем я ее обьявил. Переменная "Nik" глобальная, потму что я ее использую в двух процедурах... Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?» |  16 июня 2011, 10:24: Статус вопроса изменён на решённый (изменил автор вопроса — Дмитри3241) 16 июня 2011, 10:25: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — Дмитри3241) 
|   | Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:36 [#4]:Ребят кто может, просто изменити исходники так, что бы работала и тыкните носом где ошибка, исходники прикрипите к сообщению, за ранее всем спасибо... Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?» |  16 июня 2011, 10:48: Статус вопроса изменён на решённый (изменил автор вопроса — Дмитри3241) 
|   | Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:49 [#5]:Спасибо всем кто помагал, разобрался, если есть у кого пожелания по поводу оптимизации то пишите. Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?» |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |