![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание сокета без сетевой карты. [D7, WinXP]
Новичек © (2004-11-19 06:58:00)Имеется такой код:
procedure TForm1.Button1Click(Sender: TObject);
var
MySocket: TClientSocket;
begin
MySocket := TClientSocket.Create(nil);
MySocket.Address := '127.0.0.1';
MySocket.Port := 1234;
MySocket.Open;
MySocket.Socket.SendText('Some text');
MySocket.Close;
FreeAndNil(MySocket);
end;
На компе сетевой карты нет.
Так вот в чем проблема: при ПОВТОРНОМ клике на Button1 система огорченно восклицает - "Can't create new socket".
Не подскажут ли уважаемые Мастера, в чём тут загвоздка?
Alex Konshin (2004-11-22 22:11:00) [1]Потому и не работало, что у тебя не было IP интерфейсов.
Новичек (2004-11-22 20:56:00) [2]
> Alex Konshin
Спасибо, помогло.
Но все-таки непонятно - почему не работало?
Alex Konshin (2004-11-21 23:41:00) [3]Установи MS loopback adapter.
Piter (2004-11-21 20:04:00) [4]Новичек © (21.11.04 17:53) [9]
лучше выполни такой код:
procedure TForm1.Button1Click(Sender: TObject);
var
MySocket: TClientSocket;
begin
MySocket := TClientSocket.Create(nil);
MySocket.Address := '127.0.0.1';
MySocket.Port := 1234;
try
MySocket.Open;
except
ShowMessage('ЧИТАТЬ ПОСТЫ НУЖНО!');
end;
MySocket.Socket.SendText('Some text');
MySocket.Close;
FreeAndNil(MySocket);
end;
Новичек (2004-11-21 17:53:00) [5]
> Piter
Сетевая карта стоит?
Новичек (2004-11-21 17:52:00) [6]
> Piter
На работе на моем компе есть сетевая карта, вышеприведенный код работает без проблем.
Piter (2004-11-21 17:46:00) [7]Новичек (19.11.04 6:58)
Так вот в чем проблема: при ПОВТОРНОМ клике на Button1 система огорченно восклицает - "Can't create new socket".
ну а у меня этот код работает многократно. Че делать бум?
Новичек (2004-11-21 16:44:00) [8]
> Мастер
Дело в том, что до SendText дело не доходит.
Исключение возникает при попытке открыть сокет (MySocket.Open).
Мастер (2004-11-21 16:02:00) [9]>Новичек (21.11.04 14:27)
Почитай про реализацию сокетов в Delphi. TClientSocket - событийно-ориентированный компонент и линейная работа с ним невозможна.
procedure TForm1.Button1Click(Sender: TObject);
var
MySocket: TClientSocket;
begin
MySocket := TClientSocket.Create(nil);
MySocket.Address := '127.0.0.1';
MySocket.Port := 1234;
MySocket.Open;
MySocket.Socket.SendText('Some text');
MySocket.Close;
FreeAndNil(MySocket);
end;
Выделенный код нельзя использовать таким образом.
Используй события OnConnect и пр...
Новичек (2004-11-21 14:27:00) [10]
> Digitman
Срабатывает при первом клике, при последующих - указанное выше сообщение системы. Пробовал переводить в ctBlocking - та же хрень :-(
Digitman (2004-11-19 08:21:00) [11]
> Новичек
он у тебя и при первом клике вряд ли м.б. создан
попробуй-ка так
procedure TForm1.Button1Click(Sender: TObject);
var
MySocket: TClientSocket;
begin
MySocket := TClientSocket.Create(nil);
MySocket.ClientType := ctBlocking;
MySocket.Address := '127.0.0.1';
MySocket.Port := 1234;
MySocket.Open;
...
end;
и убедись
Новичек (2004-11-19 07:57:00) [12]Обработка исключений - это, разумеется, хорошо. Но хотелось бы знать, почему второй раз сокет не может быть создан.
VMcL (2004-11-19 07:26:00) [13]>> Новичек (19.11.04 06:58)
Дай-ка я угадаю. Наверное в try/finally?