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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 15:59   #1
prod87
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 48
По умолчанию Проблема с ClientSocket в консольном приложении

Есть 2 вопроса:


1. Из консольного приложения отправить текст при помощи ClientSocket

При подключении выдает ошибку
Код:
Asynchronous socket error 10053
Программа, которая отправляет:

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, ScktComp;


var Socket:TclientSocket;
begin
Socket:=TClientSocket.Create(nil);
Socket.Address:='127.0.0.1';
Socket.Port:=27015;
Socket.Active:=true;
Socket.Socket.SendText('lalalala');
end.


Программа которая принимает
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    memo1: TMemo;
    ClientSocket1: TClientSocket;
    Button1: TButton;
    Button2: TButton;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
memo1.Lines.Add(ServerSocket1.Socket.Connections[0].ReceiveText);
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
memo1.Lines.Add('connected');
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
memo1.Lines.Add('Diconnected');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address:='127.0.0.1';
ClientSocket1.Port:=27015;
ClientSocket1.Active:=True;

end;

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

end.
п.с. не обращайте внимания на сокет клиент в программме, которая принимает. Просто тестировал с помощью него, все ли я правильно делаю.
При запуске принимающей программы сокет уже активен.


2. Как написать в консольной программе процедуру OnRead?

Заранее спасибо!
prod87 вне форума Ответить с цитированием
Старый 18.07.2010, 14:48   #2
Ca5per
 
Регистрация: 05.12.2009
Сообщений: 8
По умолчанию

Создаем класс.

Код:
type
TMyClass = class
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
Обрабатываем процедуру.

Код:
procedure TMyClass.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
..... Socket.ReceiveText;
end;
Создаем это класс.

Код:
var
MyClass : TMyClass;
begin
MyClass:=TMyClass.Create;
И назначаем процедуру OnRead компонента, процедуре OnRead класса.

Код:
ClientSocket.OnRead:=MyClass.ClientSocketRead;
Удачи
Ca5per вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование DSPack в консольном приложении Jacobson Мультимедиа в Delphi 5 21.06.2010 05:21
Расширение экрана в консольном приложении FelixKoT Общие вопросы Delphi 1 19.02.2010 21:22
Борьба с крякозябрами в консольном приложении fs444 C++ Builder 16 15.12.2009 19:04
Содержимое экрана в полноекранном консольном приложении Роман Радер Win Api 1 29.03.2009 20:04