Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > СlientSocket есть маденькая проблемма


Автор: Alex103 1.4.2005, 00:57
Короче говоря мне нужно сделать так чтобы
Код

ClientSocket1.port:= // а здесь нужно сделать так чтобы порт можно было где нмбуть вводить 

ВВодить можно или в edit или в чем нибудь другом но проблемма в том что
Код

ClientSocket1.port:= edit1.// а тут Text не появляеться

Я так подумал и понял что нет Text из-за того что Text это String а а портом может быть только Integer потом я сделал следующее
Код

var port:integer;
begin
port:= StrToInt(edit1.text);
ClientSocket1.port:= port;
end;

но при этом хотя компилятор и не выдавал ошибок но ничего не сработало. Помогите мне. В том как можно порт ввести где-то но при этом что-бы это работало.

Автор: FRAGNATIC 1.4.2005, 01:00
Код

var port:integer;
begin
port:= StrToInt(edit1.text);
ClientSocket1.port:= port;
end;

для начала можно и просто так сделать
Код

begin
ClientSocket1.port:= StrToInt(edit1.text);
end;


Добавлено @ 01:05
я не знаю чё у теюя там не сработало но значение порту 100% присваивается
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Port:=StrToInt(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SHowMessage(IntToStr(ClientSocket1.Port));
end;

на бутон один жму на бутон два показывает мне новое значение порта) значит всё ок

Автор: Alex103 1.4.2005, 01:36
С этим я разобрался!!! Но есть еще одна проблемма!! Я думаю модераторы ничего не будут иметь против так как в теме сказано что есть маленькая проблемка а она может быть не одна. Так вот мне нужно что-бы при нажатии на кнопку если происходит соеденение в Сервером кнопка становилась недоступной а если же не соеденялись или происходила ошибка соеденения то кнопка была доступной!!! Я делал это так но ничего не вышло.
Код

if ClientSocket1.Active=true then
button1.Enabled:=false;

Автор: Alex103 1.4.2005, 01:46
Цитата(FRAGNATIC @ 1.4.2005, 01:00)
[code=delphi]
var port:integer;
begin
port:= StrToInt(edit1.text);
ClientSocket1.port:= port;
end;

А теперь пожалуйста помоги проделать это с адресом.

Автор: FRAGNATIC 1.4.2005, 01:50
а ещё лучше делай так
Код

var
   cPort:Longint;
begin
   cPort:=StrToIntDef(Trim(Edt1.Text),-1);
   if (cPort <= 0) or (cPort > 65535) then
   begin
      ShowMessage('Please, enter an valid port(1 to 65535)...');
      Exit;
   end;
 ....
//тут типа конектся
end;

насчёт второго ща гляну) просто не когда не работал с этим компонентом)
Добавлено @ 01:51
Цитата
А теперь пожалуйста помоги проделать это с адресом.

а можно по точнее?

Автор: Alex103 1.4.2005, 01:52
Цитата(Alex103 @ 1.4.2005, 01:46)
Цитата(FRAGNATIC @ 1.4.2005, 01:00)
[code=delphi]
var port:integer;
begin
port:= StrToInt(edit1.text);
ClientSocket1.port:= port;
end;

А теперь пожалуйста помоги проделать это с адресом.

Здесь я тоже все понял!!

Автор: FRAGNATIC 1.4.2005, 01:57
насчёт кнопок)
вообщем если тебе надо что бы когда происходит дисконект становилась кнопка конекта активной то у компонента есть событие ондисконект
на событие онконект делай ей не активно
насчёт
Код

if ClientSocket1.Active=true then
button1.Enabled:=false;

ты это где проверяеш?
в любом случаи пральней будет
Код

if ClientSocket1.Active then
button1.Enabled:=false
else
button1.enabled:=true;

Автор: Alex103 1.4.2005, 01:58
Цитата(FRAGNATIC @ 1.4.2005, 01:50)
а ещё лучше делай так
Код

var
   cPort:Longint;
begin
   cPort:=StrToIntDef(Trim(Edt1.Text),-1);
   if (cPort <= 0) or (cPort > 65535) then
   begin
      ShowMessage('Please, enter an valid port(1 to 65535)...');
      Exit;
   end;
 ....
//тут типа конектся
end;

насчёт второго ща гляну) просто не когда не работал с этим компонентом)
Добавлено @ 01:51
Цитата
А теперь пожалуйста помоги проделать это с адресом.

а можно по точнее?

Но по моему это просто говорит человеку что нужо ввести порт от 1 до 65535 только в том случае если человек не ввел имя порта. А как сделать так что-бы выдавалось сообщение если конект не прошел!!!!!

Автор: FRAGNATIC 1.4.2005, 02:01
у компонента есть событие онэрор)
Добавлено @ 02:02
Цитата
Но по моему это просто говорит человеку что нужо ввести порт от 1 до 65535 только в том случае если человек не ввел имя порта

ну вопервых от ошибок лишних во вторых у порта не имя а номер)

Добавлено @ 02:05
Код

   if ErrorEvent = eeConnect then
   begin
      ShowMessage('Can''t connect to ' + ClientSocket1.Address + '...');
    //ну и кнопку свою здесть включай или выключай
   end;
   ErrorCode:=0;

это пиши на онэрор

Автор: Alex103 1.4.2005, 02:15
Цитата(FRAGNATIC @ 1.4.2005, 02:01)
у компонента есть событие онэрор)
Добавлено @ 02:02
Цитата
Но по моему это просто говорит человеку что нужо ввести порт от 1 до 65535 только в том случае если человек не ввел имя порта

ну вопервых от ошибок лишних во вторых у порта не имя а номер)

Добавлено @ 02:05
Код

   if ErrorEvent = eeConnect then
   begin
      ShowMessage('Can''t connect to ' + ClientSocket1.Address + '...');
    //ну и кнопку свою здесть включай или выключай
   end;
   ErrorCode:=0;

это пиши на онэрор

А вот сообщенпие о том что подключено успешно не вылетает!!!!

Автор: FRAGNATIC 1.4.2005, 02:18
так это сообщение если не удачно подключино!!! ты даж почитай что в сообщение написано каннот ) а сообщение об удачном подключении надо писать на онконект
Добавлено @ 02:21
Цитата
А как сделать так что-бы выдавалось сообщение если конект не прошел!!!!!

был вопрос если НЕ прошёл конект я те дал на него ответ)
вообщем так
онконект - законектились всё ок там пиши чё хош
он дисконект произошло разъединение (не обезательно по ошибке )
онерор - произошла ошибка не удалось законектится или ещё чёнить типа разъединение (посмотри в справке виды эрорэвентов

Автор: Alex103 1.4.2005, 02:26
Цитата(FRAGNATIC @ 1.4.2005, 02:18)
так это сообщение если не удачно подключино!!! ты даж почитай что в сообщение написано каннот ) а сообщение об удачном подключении надо писать на онконект
Добавлено @ 02:21
Цитата
А как сделать так что-бы выдавалось сообщение если конект не прошел!!!!!

был вопрос если НЕ прошёл конект я те дал на него ответ)
вообщем так
онконект - законектились всё ок там пиши чё хош
он дисконект произошло разъединение (не обезательно по ошибке )
онерор - произошла ошибка не удалось законектится или ещё чёнить типа разъединение (посмотри в справке виды эрорэвентов

Ну так все равно оно не появлялось

Автор: FRAGNATIC 1.4.2005, 02:28
хоть самому проверяй (я вообще не разу этот компонент не юзал)
ща попробую быстренько чёнить состряпать)
вообще не мешало бы что бы ты здесь и код выложил хоть кусок а то фиг его знает чё у тебя там

Автор: Alex103 1.4.2005, 02:30
Цитата(FRAGNATIC @ 1.4.2005, 02:28)
хоть самому проверяй (я вообще не разу этот компонент не юзал)
ща попробую быстренько чёнить состряпать)
вообще не мешало бы что бы ты здесь и код выложил хоть кусок а то фиг его знает чё у тебя там

Код выложить да нет проблем хоть и весь!!!!
Добавлено @ 02:31
Это код клиента
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ScktComp, Mask, jpeg;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Image1: TImage;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button5Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if edit2.Text<>'' then
begin
ClientSocket1.port:= StrToInt(edit2.text);
end;
if edit1.Text<>'' then
begin
ClientSocket1.Address:= edit1.Text;
end;
clientsocket1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('message');
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ShowMessage('Отключено от' + ClientSocket1.Address + '...');
button1.Enabled:=True;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
ClientSocket1.Active:=false;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ShowMessage('Подключено к ' + ClientSocket1.Address + '...');
   Button1.Enabled:=false;
end;



а это сервера
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ScktComp, jpeg;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    Image1: TImage;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
  Kartinka1: TMemoryStream;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:=true;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
if socket.ReceiveText ='message' then showmessage('Все работает');
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
image1.Picture.Bitmap.SaveToStream(kartinka1);
end;

end.

Автор: FRAGNATIC 1.4.2005, 02:37
вообще я не вижу не каких ошибок)
скажи ещё раз что тебе именно надо и что именно в этом коде не работает )

Автор: FRAGNATIC 1.4.2005, 02:47
вообщем у меня всё отлично пашет) если законектилось показывает сообщение (на он конект)
Добавлено @ 02:49
вообщем нефиг тут флейм разводить ) если чё стучи в асю тк реально всё должно работать)

Автор: Alex103 1.4.2005, 02:53
Цитата(FRAGNATIC @ 1.4.2005, 02:37)
вообще я не вижу не каких ошибок)
скажи ещё раз что тебе именно надо и что именно в этом коде не работает )

Я уже все сделал!! Спасибо тебе за советы. Вот тебе плюсик!!!

Автор: FRAGNATIC 1.4.2005, 03:05
да не за что)
и ещё в серверсокет есть тож события тип онклиентэрор онклиентдисконект
по ходу они тож для того чтобы если клиент разорвал соединение или ещё чёнить (вдруг те пригодится)

Автор: Alex103 1.4.2005, 03:54
Цитата(FRAGNATIC @ 1.4.2005, 03:05)
да не за что)
и ещё в серверсокет есть тож события тип онклиентэрор онклиентдисконект
по ходу они тож для того чтобы если клиент разорвал соединение или ещё чёнить (вдруг те пригодится)

Ок если чё обязательно спрошу!!

Автор: Alex103 1.4.2005, 04:39
А вот и еще один вопросик!!! Мне нужно сделать следующее. Я хочу видеть когда сервер в сети а когда нет!!! Я придумал сделать это так. Когда клиент конектиться с сервером клиент посылает запрос в сокет например "Timer" сервер в свою очередь получает запрос и включает таймер который в свю очередь посылает каждые 15 минут запрос назовем его "Ping" при этом клиент при получении запроса пишет в Лейбел что пользователь "Какой-то" в сети!!! В общем представлю это в виде кода.

Это посылает клиент при старте
Код


ClientSocket1.Socket.SendText('Timer');

Это то что делает сервер при получении
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
if socket.ReceiveText = 'Timer' then timer1.Enabled:=true;
end;


Это то что делает клиент при получении

Код

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
if socket.ReceiveText ='ping' then statusbar1.Panels[0].Text:='На связи';
end;


А это делает таймер каждые 15 минут
Код

ServerSocket1.Socket.SendText('ping');




Но подскажите мне почему этот код не пашет!

Автор: FRAGNATIC 1.4.2005, 04:49
да собсно говоря сервер не зависим поэтому то что ты привёл считай ед вариант (ну конечно можно по разному мутить но принцип такой )

Автор: Alex103 1.4.2005, 04:53
Цитата(FRAGNATIC @ 1.4.2005, 04:49)
да собсно говоря сервер не зависим поэтому то что ты привёл считай ед вариант (ну конечно можно по разному мутить но принцип такой )

В смысле независим!

Автор: FRAGNATIC 1.4.2005, 05:07
так не выде по ходу те надо тогда на сервере установить ещё и клиент а на клиенте установить сервак и мутить с ними уже)


Автор: Alex103 1.4.2005, 05:26
Цитата(FRAGNATIC @ 1.4.2005, 05:07)
так не выде по ходу те надо тогда на сервере установить ещё и клиент а на клиенте установить сервак и мутить с ними уже)

И я так подумал!!! Но это же ни на что не влияет!!!!

Автор: FRAGNATIC 1.4.2005, 05:30
в этом вовпросе не знаю
опять повторю сегодня первый раз в жизни с этими копонентами чёт сотворил так что не наю по ходу должно работать)

Автор: Alex103 1.4.2005, 06:13
Цитата(FRAGNATIC @ 1.4.2005, 05:30)
в этом вовпросе не знаю
опять повторю сегодня первый раз в жизни с этими копонентами чёт сотворил так что не наю по ходу должно работать)

Ну все теперь модераторам можно закрыть эту тему!!!! Здесь задан вопрос и получен на него полный ответ!!! Огромное тебе спасибо за помощь!!

Автор: Alex 1.4.2005, 06:45

 ! 
 
Alex103, Сколько раз можно говорить, что один топик - один вопрос! Еще раз увижу, тему буду закрывать на корню. Сами потом жалуетесь, что поиском ничего найти нельзя, а как тут найдешь, если в одной теме 3 вопроса. Название темы должно отражать ее суть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)