|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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; |
#2
|
||||
|
||||
Извиняюсь за встречный вопрос но ClientSocket1.Host:='comp1'; это что?
Host это имя машины к которой мы хотим подключится(например 192.127.01.01), что такое comp1??? где вы указываете порт? ClientSocket1.Port:=2011? Где? |
#3
|
|||
|
|||
comp это имя компьютера в сети. порт непосредственно указан в самом компоненте, я же написал что по отдельности все работает, работает даже вместе если между IFами вставить Showmessage с каким либо текстом, без него выдает ошибку описанную выше
|
#4
|
||||
|
||||
Цитата:
-зачем открывать клиента, если сразу же его закрыть? -почему после send сразу close (уверен, что SO_LINGER)? -if'ы вообще вне блока begin-end! -если оба чекбокса == true? -... как много разных почему) Пишу программы за еду. __________________ |
#5
|
|||
|
|||
пардон моя неаккуратность.. исходник выглядит так:
Код:
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
|
|||
|
|||
насколько я понял то вызов процедуры ClientSocket1Connect происходит только после окончания выполнения процедуры нажатия кнопки и он пытается открыть еще один хост в то время как открыт первый, но не совсем понятно почему тогда все работает если вставить вывод сообщения? как правильнее будет сделать? или необходимо добавлять несколько компонентов Clientsocket для реализации этой задачи?
|
#7
|
||||
|
||||
Код:
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. Пишу программы за еду. __________________ |