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

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

TWSocket [WinXP]


Axis_of_Evil ©   (2006-10-22 23:12:00) 

[ICS v 5]
Сервер = TTcpDaemon
// 1 в 1 из примера TcpCmd.pas проекта SrvTcp
Клиент = TWSocket.

в обработчике клиентского сокета OnDataSent:
 Socket.Close;

в результате
 на сервер данные не доходят, т.е.
Client connecting: 192.168.0.125
Client disconnecting: 192.168.0.125 Duration: 00:00:00

0) корректно ли вызывать Socket.Close в OnDataSent?
// думается, все же - да
1) в чем может быть причина того, щто данные не доходят?
     в случае отладки приложение - доходят:>
// могу привести код, но в нем ничего необычного не содержится


Anatoly Podgoretsky   (2006-10-24 13:15:00) [1]

Так я тоже первый месяц, вопросы возникают, на некоторые только автор может ответить. И него некоторые отклонения есть.


Axis_of_Evil   (2006-10-24 08:23:00) [2]


> Anatoly Podgoretsky ©   (23.10.06 23:43) [8]
> Вот твой код Socket.Close и между прочим в обработчике!

так и было. впервые сevent-driven sockets работаю.
ранее с сокетами имел дело только 1 раз 2 года назад - *nix [blocking] sockets.


Anatoly Podgoretsky   (2006-10-23 23:43:00) [3]

Вот твой код Socket.Close и между прочим в обработчике!


Axis_of_Evil   (2006-10-23 23:04:00) [4]


> Ну а сам то что используешь, не close конечно нужен.

не очень понял, щто значат слова до запятой. честно.
вероятно, надо продуть мозг.
// разъясните все же.

>не close конечно нужен.
я понимал принцип работы т.о., щто вызов OnDataSent свидетельствует
 не только об отправке, но и о доставке. не так понял, бывает.


Axis_of_Evil   (2006-10-23 22:50:00) [5]

пункт 1)
procedure TTCPClientMessenger.DataSent(Sender: TObject; ErrCode: Word);
begin
 Socket.Shutdown(1);
 ProcessTasks;
end;

..
   Socket.Close;
   Socket.Connect;
..

that's the way thigs go-oh-oh-oh
                            /The Offspring/


Anatoly Podgoretsky   (2006-10-23 22:50:00) [6]

Ну а сам то что используешь, не close конечно нужен.


Axis_of_Evil   (2006-10-23 22:44:00) [7]

пункт 0:
http://users.pandora.be/sonal.nv/ics/faq/Frame_index.html

- Close

Attempt to gracefully close the socket.  If there is still some data waiting in the buffers it will try to send it.   Do not use Close from within any TWSocket events, instead use CloseDelayed.


Axis_of_Evil   (2006-10-22 23:23:00) [8]

непонятно


Axis_of_Evil   (2006-10-22 23:19:00) [9]

прописываем в обработчике OnDataSent:
 Sleep(100);
т.е.
procedure TTCPClientMessenger.DataSent(Sender: TObject; ErrCode: Word);
begin
 Sleep(100);
 Socket.Close;
endl;

все замечательно работает.


Axis_of_Evil   (2006-10-22 23:14:00) [10]

да и:
ClientSocket.Connect вызывается из обработчика
OnDataAvaible другого TWSocket


Наверх

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