Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.11.2011, 15:14
Deell Deell вне форума
Прохожий
 
Регистрация: 02.09.2011
Сообщения: 19
Репутация: 10
По умолчанию 10049 socket error

при нажатии на кнопку выполняется вот такой код
Код:
if CheckBox1.Checked=True then begin
  ClientSocket1.Host:='comp1';
  ClientSocket1.Open;
  ClientSocket1.Close;
end;
 
if CheckBox2.Checked=True then begin
  ClientSocket1.Host:='comp2';
  ClientSocket1.Open;
  ClientSocket1.Close;
end;
 
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText('s');
ClientSocket1.Close;
end;
выскакивает ошибка asynchronous socket error 10049, а если между условиями добавить showmessage, то все норм. подскажите в чем проблема?
Ответить с цитированием
  #2  
Старый 07.11.2011, 20:42
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Извиняюсь за встречный вопрос но ClientSocket1.Host:='comp1'; это что?
Host это имя машины к которой мы хотим подключится(например 192.127.01.01), что такое comp1??? где вы указываете порт? ClientSocket1.Port:=2011? Где?
Ответить с цитированием
  #3  
Старый 08.11.2011, 08:20
Deell Deell вне форума
Прохожий
 
Регистрация: 02.09.2011
Сообщения: 19
Репутация: 10
По умолчанию

comp это имя компьютера в сети. порт непосредственно указан в самом компоненте, я же написал что по отдельности все работает, работает даже вместе если между IFами вставить Showmessage с каким либо текстом, без него выдает ошибку описанную выше
Ответить с цитированием
  #4  
Старый 08.11.2011, 08:56
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Deell
подскажите в чем проблема?
не в чем, а в ком - все неправильно: код не подлежит доработке, только полное переписывание!!!
-зачем открывать клиента, если сразу же его закрыть?
-почему после send сразу close (уверен, что SO_LINGER)?
-if'ы вообще вне блока begin-end!
-если оба чекбокса == true?
-...

как много разных почему)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 08.11.2011, 09:27
Deell Deell вне форума
Прохожий
 
Регистрация: 02.09.2011
Сообщения: 19
Репутация: 10
По умолчанию

пардон моя неаккуратность.. исходник выглядит так:
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
if CheckBox1.Checked=True then begin
  ClientSocket1.Host:=comp1';
  ClientSocket1.Open;
  end;

if CheckBox2.Checked=True then begin
  ClientSocket1.Host:='comp2';
  ClientSocket1.Open;
  end;
end;
процедура при конекте клиента к серверу:
Код:
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText('s'+IntToStr(N));
ClientSocket1.Close;
end;
по поводу логики:
проверяется если первый чекбокс стоит имя хоста - Comp1 конект, при удачном конекте отсылка сообщения, закрытие соединения, проверяется второй чекбокс и т.д. я обхясню что непосредственнодля одного чекбокса все выполняется отлично(неважно первый или второй) если между условиями поставить showmessage то выполняется весь код без ошибок, даже если чекбоксов 5,10 но мне не нужно выводить сообщение после каждой отправки, ноесли убрать вывод сообщения то выдает ошибку.
Ответить с цитированием
  #6  
Старый 08.11.2011, 10:26
Deell Deell вне форума
Прохожий
 
Регистрация: 02.09.2011
Сообщения: 19
Репутация: 10
По умолчанию

насколько я понял то вызов процедуры ClientSocket1Connect происходит только после окончания выполнения процедуры нажатия кнопки и он пытается открыть еще один хост в то время как открыт первый, но не совсем понятно почему тогда все работает если вставить вывод сообщения? как правильнее будет сделать? или необходимо добавлять несколько компонентов Clientsocket для реализации этой задачи?
Ответить с цитированием
  #7  
Старый 08.11.2011, 11:22
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    ClientSocket1: TClientSocket;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function SendText(URL: String): String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:=SendText('www.delphisources.ru');
  Memo2.Text:=SendText('ya.ru');
end;

function TForm1.SendText(URL: String): String;
begin
  ClientSocket1.ClientType:=ctBlocking;
  ClientSocket1.Host:=URL;
  ClientSocket1.Port:=80;
  ClientSocket1.Open;
  ClientSocket1.Socket.SendText('GET / HTTP/1.1'#13#10#13#10);
  Sleep(1000);
  Result:=ClientSocket1.Socket.ReceiveText;
  ClientSocket1.Socket.Close;
  ClientSocket1.Close;
end;

end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter