Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 414

/ вопрос решён /

Здравствуйте, эксперты!
Я пишу сейчас чат простетский, но возникла "заминка",я сделал по принципу один сервер и много клиентов, отправку сообщений я решил сделать так: Клиент посылает текст на сервер, сервер отображает его в Memo и потом скидывает всем клиентам в том числе и отправителя, но почему то не получаеться, либо проблема в клиенте, либо в сервере, либо в кривых руках :) Вот исходники сервера и клиента если не сложно посмотрите пожалуста.
Вот сылки на исходники:
http://dump.ru/file/5268770 - Server.rar
http://dump.ru/file/5268771 - Client.rar

Дмитри3241 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Дмитри3241 (статус: Посетитель)
Вопрос отправлен: 16 июня 2011, 07:31
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 16 июня 2011, 10:49; участников в обсуждении: 2.
Дмитри3241

Дмитри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

bugmenot (статус: 3-ий класс), 16 июня 2011, 09:10 [#2]:

А почему переменная Text не используется? А вместо этого из сокета Kk (почему опять глобальная?) раз читается пустая строка?
виконання програми розпочинається з того самого мiсця, де призупинилося.

16 июня 2011, 10:00: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А.

Дмитри3241

Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:18 [#3]:

Переменная "Kk" это "Количевство Клиентов", да и вообще вопрос был в другом почему клиент не принимает сообщение с сервера, а переменная "Text" исчезнить во время оптимизации кода, я уже и непомню зачем я ее обьявил. Переменная "Nik" глобальная, потму что я ее использую в двух процедурах...
Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?»

16 июня 2011, 10:24: Статус вопроса изменён на решённый (изменил автор вопроса — Дмитри3241)

16 июня 2011, 10:25: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — Дмитри3241)

Дмитри3241

Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:36 [#4]:

Ребят кто может, просто изменити исходники так, что бы работала и тыкните носом где ошибка, исходники прикрипите к сообщению, за ранее всем спасибо...
Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?»

16 июня 2011, 10:48: Статус вопроса изменён на решённый (изменил автор вопроса — Дмитри3241)

Дмитри3241

Дмитри3241 (статус: Посетитель), 16 июня 2011, 10:49 [#5]:

Спасибо всем кто помагал, разобрался, если есть у кого пожелания по поводу оптимизации то пишите.
Есть два типа людей: одни катят мир, а другие бегут рядом и кричат: «Боже, куда катится этот мир!?»

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.02 сек.