Страница 1 из 1
Как узнать закончил ли клиент передачу данных?
Добавлено: 04 ноя 2004, 20:52
Vano
Я использую компоненты TServerSocket, TClientSocket. Пытаюсь переслать файл от клиента к серверу. Если файл большой, то он пересылается "порциями" байт. Мне необходимо знать закончил ли клиент передачу данных. Как можно это узнать?
Добавлено: 05 ноя 2004, 02:13
AiK
Вообще говоря способа два.
Первый, общепринятый, это когда клиент перед отправкой контента серверу сообщает общее количество байт, передаваемых в massage body, и, если речь идёт о chunk'ах - размер очередного куска в байтах. Т.е. ты постоянно сверяешь два числа - весь ли очередной кусок получен, и если весь, то не всё ли тело сообщения уже получено.
Подвариант - клиент в конце message body отправляет некую кодовую комбинацию, получение которой автоматически означает завершение передачи.
Ну и второй вариант - клиент по окончании передачи закрывает коннекцию.
Добавлено: 05 ноя 2004, 11:30
Vano
Если я пишу так, то клиент не успевает передать всю информацию до выполнения ClientSocket1.Close.
Код: Выделить всё
ClientSocket1.Socket.SendStream(TFileStream.Create(pathfile,
fmOpenRead or fmShareDenyWrite));
ClientSocket1.Close;
Как тогда быть??
И ещё одна проблема. Если я открываю клиента в той же процедуре из которой передаю данные, то первый SendStream выполняется, а последующие нет. Они выполняются только после второго входа в эту процедуру. А если же открыть клиента не в этой процедре, то всё нормально. Чё так?
Добавлено: 09 ноя 2004, 08:06
Naeel Maqsudov
Если я пишу так, то клиент не успевает передать всю информацию до выполнения ClientSocket1.Close.
Мне кажется, что передать-то он успевает, но на серверной стороне событие OnCloseConnection происходит раньше, чем сервер успевает обработать данные из буфера.