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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 18:33   #1
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
Вопрос ClientSocket не отправляет сообщения

Создал сервер и клиент. У клиента задаю адрес и порт сервера, активирую и открываю. В событии OnConnect прописываю отправку текстового сообщения "Connected"
В событии формы OnDestroy прописываю отправку текстового сообщения "disconnected"

Сообщение о коннекте до сервера доходит, что не скажешь не сообщении о дисконнекте. Ни Exception'а, ничего нет. Просто тишина. Бывало ли у кого нибудь такое и как это решить?
ruN00b вне форума Ответить с цитированием
Старый 17.11.2013, 18:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а как оно дойдет, если дисконнект уже закрыл канал связи?
Или я чего-то не понимаю?
Стесняюсь спросить, зачем при дисконнекте отправлять что-то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 19:34   #3
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
По умолчанию

Stilet, о дисконнекте я имел ввиду, что все происходит так:
  1. На сервер отправляется сообщение о дисконнекте (клиент еще не вышел)
  2. Закрывается окно и естесственным путем происходит уничтожение сокета

Кстати сообщение не выводится в событиях, не относящихся к сокету, к примеру Button1Click или FormDestroy, тогда как ClientSocket1Read или ClientSocket1Connect вполне отправляют сообщение.
ruN00b вне форума Ответить с цитированием
Старый 26.11.2013, 00:00   #4
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Не нашел решения проблемы? Потому что у меня тоже самое.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 26.11.2013, 00:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй этот код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Port:=666;
ClientSocket1.Host:='localhost';
ClientSocket1.Active:=true;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 Caption:=Socket.ReceiveText;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Edit1.Text);
end;

end.
Просто как пример. Я его использовал для своих нужд.

Цитата:
сообщение не выводится в событиях, не относящихся к сокету
Ну еще бы )
И не должно.
I'm learning to live...

Последний раз редактировалось Stilet; 26.11.2013 в 00:16.
Stilet вне форума Ответить с цитированием
Старый 26.11.2013, 00:36   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Короче, я использовал компоненты Indy, TIdTcpServer~Client и передача работает успешно.
Функция, которую я повесил на кнопку успешно передает строку на сервер.
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
IdTCPClient1.Socket.WriteLn('ololo');
end;
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 26.11.2013, 00:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кстати я тут подумал. Если в OnDestroy прописывать передачу сообщения, то его потеря может обьясняться тем что после дестроя нет дисконнекта, и Инди-сервер не в курсе что ему нужно закончить считывать данные, так как ждет дисконнект чтоб убедиться что все пакеты данных успешно пришли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket, ServerSocket - проблема с передачей сообщения Karateka Работа с сетью в Delphi 6 27.05.2013 10:24
Окно не молучает/не отправляет windows сообщения Ryabinin313 Win Api 6 25.07.2012 22:38
Не отправляет сообщения Mihanches Работа с сетью в Delphi 0 18.10.2010 17:18
idTCPClient не отправляет сообщения TwiX Работа с сетью в Delphi 2 09.03.2010 23:56
TClientSocket не отправляет запрос Cold_Night Работа с сетью в Delphi 0 17.02.2010 21:43