Форум: "Сети";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизСобытие 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c