Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Создание сокета без сетевой карты.   Найти похожие ветки 

 
Новичек   (2004-11-19 06:58) [0]

Имеется такой код:

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".
Не подскажут ли уважаемые Мастера, в чём тут загвоздка?


 
VMcL ©   (2004-11-19 07:26) [1]

>>Новичек  (19.11.04 06:58)

Дай-ка я угадаю. Наверное в try/finally?


 
Новичек   (2004-11-19 07:57) [2]

Обработка исключений - это, разумеется, хорошо. Но хотелось бы знать, почему второй раз сокет не может быть создан.


 
Digitman ©   (2004-11-19 08:21) [3]


> Новичек


он у тебя и при первом клике вряд ли м.б. создан

попробуй-ка так

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-21 14:27) [4]


> Digitman
Срабатывает при первом клике, при последующих - указанное выше сообщение системы. Пробовал переводить в ctBlocking - та же хрень :-(


 
Мастер ©   (2004-11-21 16:02) [5]

>Новичек   (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 16:44) [6]


> Мастер
Дело в том, что до SendText дело не доходит.
Исключение возникает при попытке открыть сокет (MySocket.Open).


 
Piter ©   (2004-11-21 17:46) [7]

Новичек   (19.11.04 6:58)
Так вот в чем проблема: при ПОВТОРНОМ клике на Button1 система огорченно восклицает - "Can"t create new socket".


ну а у меня этот код работает многократно. Че делать бум?


 
Новичек ©   (2004-11-21 17:52) [8]


> Piter
На работе на моем компе есть сетевая карта, вышеприведенный код работает без проблем.


 
Новичек ©   (2004-11-21 17:53) [9]


> Piter
Сетевая карта стоит?


 
Piter ©   (2004-11-21 20:04) [10]

Новичек ©   (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;


 
Alex Konshin ©   (2004-11-21 23:41) [11]

Установи MS loopback adapter.


 
Новичек ©   (2004-11-22 20:56) [12]


> Alex Konshin
Спасибо, помогло.
Но все-таки непонятно - почему не работало?


 
Alex Konshin ©   (2004-11-22 22:11) [13]

Потому и не работало, что у тебя не было IP интерфейсов.



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
6-1101283152
Донской
2004-11-24 10:59
2005.02.06
соединение с mail.ru


14-1105761120
Думкин
2005-01-15 06:52
2005.02.06
С Днем Рождения! 15 января


14-1105870540
REA
2005-01-16 13:15
2005.02.06
Игра "Монолит"


14-1105807246
hamster
2005-01-15 19:40
2005.02.06
Кладовка


1-1106728327
s_ilnar
2005-01-26 11:32
2005.02.06
считывание файлов в несколько потоков