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

Вниз

Событие OnServerSockeClientWrite   Найти похожие ветки 

 
kosmach ©   (2002-08-07 12:44) [0]

Простите если совсем задрал, но как мне сказали, событие onClientWrite происходит, когда сервер передал последний байт из буфера и снова готов передавать, или сразу при коннекте. Однако у меня оно срабатывает, только во втором случае.
Вот код:
...

procedure TForm1.ClientSocketWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Client: OnWrite");
end;

procedure TForm1.ServerSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Server: OnClientWrite");
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket.Socket.SendText("Hi, Server");
end;

procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Client: Rreceive text: "+Socket.ReceiveText);
end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Server: Rreceive text: "+Socket.ReceiveText);
Socket.SendText("Hi, Client");
end;

...
Однако сколько бы я не отпрвлял message на сервер и не получал ответный, в Memo надписи "Client: OnWrite" и "Server: OnClientWrite" появляются только один раз, сразу после установки соединения.


 
ACR ©   (2002-08-07 19:08) [1]

а ты и паверил... гы гы гы


 
kosmach ©   (2002-08-08 06:45) [2]


> ACR ©

Очень смешно ...блин... мне работать надо, а у меня затык в самом начале пути.


 
MAYOR ©   (2002-08-08 09:56) [3]

а ты зачем все ето на одной форме сделал???сделай в разных приложениях!!!у тебя 1 приложение-1 поток!!!


 
kosmach ©   (2002-08-08 11:40) [4]


> MAYOR ©


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


 
MAYOR ©   (2002-08-08 11:52) [5]

огда работай в разных потоках!!! у тебя отсылка и прием происходят мгновенно. поетому у тебя не успевает читаться сообщение!!!делай многопоточное приложение!!! ксати интересно что ти придумал!!! можеш на мило отвечать быстрей получится


 
Alex Demchenko   (2002-08-08 13:11) [6]


> Однако сколько бы я не отпрвлял message на сервер и не получал
> ответный, в Memo надписи "Client: OnWrite" и "Server: OnClientWrite"
> появляются только один раз, сразу после установки соединения.

Это совсем не так! Дело в том что в OS существует некий буфер отправки информации. Т.е. когда ты вызывает send, то получается что вроде как это non-blocking операция и информация сразу ушла, на самом деле она добавляется в буффер отправки и ждет своего времени. Конечно, этот буфер небесконечен и иногда переполняется, тогда send() вернет -1 (SOCKET_ERROR) и WSAGetLastError WSAEWOULDBLOCK, через некоторое время, когда буфер будет свободен !ВЫЗЫВАЕТСЯ FD_WRITE, в этом случае ClientSocketWrite!. Другими словами FD_WRITE говорит нам о том что соrет готов для записи и можно писать до тех пор, пока не переполнится буффер (ошибка WSAEWOULDBLOCK), после того как FD_WRITE будет вызван опять, можно продолжать запить. Сорри что на компоненте это показать не могу, т.к. пишу обычно свои :)


 
kosmach ©   (2002-08-08 13:16) [7]


> MAYOR ©

Ничего интересного я не придумал, все чего мне надо было - это послать несколько файлов с сервера клиенту, а OnClientWrite, нужен был для того, чтобы раньше времени не убить поток, который я отсылаю с сервера. Раз не работает OnClientWrite, то раз уж мне все равно клиенту имя файла посылать отдельно, так я ему еще и размер послал, а он как весь файл принял, так мне сообщение и послал, что все принял, тут я поток и убиваю. Ну или если чегото не получилось, то при дисконнекте. Вобщем может и через задницу, зато работает, проверял.
Извени, что медленно отвечаю, просто редко сюда заглядываю.


 
kosmach ©   (2002-08-08 13:21) [8]


> Alex Demchenko

Спасибо, я так понял, что OnClientWrite возникает не тогда когда уйдет последний байтик из буфера, а когда в буфере появится место, для помещения туда новых байтиков. Потому оно у меня и не срабатывало, так как я туда слишком мало клал и буфер никогда не наполнялся.
Все я ясно, спасибо.



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
1-21040
Stocker!
2002-09-27 11:10
2002.10.07
Поворот Bitmap a


1-20955
Demiurg
2002-09-25 19:14
2002.10.07
Сохранение шрифта в поток.


1-21057
Корнейчук Михаил
2002-09-24 15:16
2002.10.07
RTF->HTML


1-21131
Oleon
2002-09-24 15:56
2002.10.07
Привет! Где можно выставить DEFAULT_CHARSET, чтобы кирилица была.


1-20973
ruslan_as
2002-09-26 13:26
2002.10.07
как присвоить полю Float значение пусто