Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание сокета без сетевой карты. [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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо