|
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 51
|
|||||||||||||||||||||
Пересылка файла по сети.Установка обработчика сетевых ошибок26.01.2014, 10:31. Показов 1664. Ответов 3
Метки нет (Все метки)
Привет всем!!! Помогите пожалуйста бедному студенту. Нужно немного изменить две программы. Эти программы уже сдавал другой студент, поэтому что бы препод не спалил нужно их изменить. (Сам в этом мало разбираюсь)
Вот сами программы:
Напишите самостоятельно программы , пересылающую и, соответственно, принимающую двоичный файл с одного компьютера на другой (для тренировки вначале напишите программу, которая пересылает файл на одном и том же компьютере,но в другой каталог, используя механизм сокетов). Для чтения и записи двоичных (т. е. не обязательно текстовых) файлов есть функции
Размер i-го куска (4 байта) i-й кусок файла (<=1024 байт) Клиент же записывает эти куски последовательно себе на диск в какой-нибудь файл, а после записи очередного куска отправляет подтверждение серверу. Сервер же в это время ждёт подтверждения, и когда оно приходит, посылает очередной кусок файла. Подтверждения нужны не для того, чтобы гарантировать доставку данных, а для того, чтобы в сети не произошло .затора. из пакетов. Запись на диск _ медленная операция (по крайней мере, медленнее, чем чтение), и может получиться так, что клиент не будет успевать сливать воду из трубы-сокета.. Для маленьких файлов это будет незаметно, а вот при попытке переслать файл мегабайт на десять могут начаться всякие проблемы... Прежде всего, нужно помнить, что, несмотря на всякие гарантии доставки пакетов, любая сеть очень ненадёжна по своей природе. В самом деле, что будет, если злоумышленник перережет провод, по которому передается информация государственной важности, а мы об этом ничего не узнаем? Нам нужно уметь контролировать сетевые ошибки. Для этого существует функция signal, устанавливающая функцию-обработчик на определённый тип события (в нашем случае разрыв соединения). Это делается в самом начале программы так:
0
|
|||||||||||||||||||||
| 26.01.2014, 10:31 | |
|
Ответы с готовыми решениями:
3
Создание глобального обработчика ошибок. Пересылка QPixmap по сети Пересылка сообщений по сети |
|
3 / 3 / 2
Регистрация: 03.10.2012
Сообщений: 28
|
|
| 23.02.2014, 12:26 | |
|
1. signal - это системный вызов, устанавливающий обработчики для сигналов (Не для сетевых ошибок). Этот вызов в вашей программе лишний, и бесполезный.
2. Если удаленная сторона (та, которая слушает файл по сети) не успевает читать данные из сокета и писать их на диск, то RECV буфер сокета на этой стороне забивается, и другая (отправляющая файл) сторона при попытке сделать send получит как результат -1 и errno WOULDBLOCK. Для решения проблемы номер 2 существует много вариантов: 1. Увеличить RECV буфер на медленной стороне. см setsockopt(); 2. Использовать 2-ой поток для временной буферизации данных в оперативе. 3. Обрабатывать WOULDBLOCK на передающей стороне, и повторять отправку через 20 милисекунд. Добавлено через 4 минуты Блин, кто вам такую чушь рассказал про signal.. Если что, то установка обработчика на SIG PIPE/BUS/SEGV нужна для того чтобы при креше аппликейшена вы сумели задампить инфу о креше. Вам это не нужно в рамках это задачи.
0
|
|
|
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 51
|
|
| 23.02.2014, 12:46 [ТС] | |
|
Эта задача с методички. Без использования signal задача считается не верной. Может вы поможете слегка изменить код программы?
0
|
|
|
3 / 3 / 2
Регистрация: 03.10.2012
Сообщений: 28
|
|
| 23.02.2014, 13:20 | |
|
Это неправильная методичка, увы..
Вы установили обработчик на сигнал SIGPIPE. Этот сигнал пришлет нам ядро в случае если send будет использовать разорванное соединение. "Broken pipe". А теперь представьте - у вас 2 сокета в которые вы пишете данные, как вы поймете по чью душу пришел SIGPIPE? ![]() А теперь еще момент, так как физического разрыва соединения у вас НЕТ, у вас есть WOULDBLOCK из-за того что удаленная сторона медленно разгребает RECV буфер и SIGPIPE не придет НИКОГДА. И еще 79 человек согласны со мной на stackoverflow: http://stackoverflow.com/quest... m-properly У вас сейчас есть выбор: 1. Сделать мега неправильный по своей логике аппликейшн, который чудом доставит данные. 2. Сделать все правильно, и доказать что задача в методичек некорректна. Добавлено через 18 минут Видимо, автор методического пособия приследовал цель одним выстрелом убить 2-х зайцев. Показать как работают сокеты и научить обработке сигналов. Увы ни то ни другое ему сделать не удалось. Если вы хотите своему преподавателю показать что сигналы обрабатывать вы тоже умеете, то используйте вместо signal вызов sigaction (http://www.opennet.ru/man.shtm... &russian=0) И можете проапдэйтить свое приложение например, чтобы по получении SIGINT (Ctrl+c) оно закрывало сокет и очищало динамическую память. Будет куда более показательнее и полезнее для вас как для будущего разработчика. Как человек в 4-х летним стажем работы системным программистом я просто не могу позволить вам следовать вашей методичке.
0
|
|
| 23.02.2014, 13:20 | |
|
Помогаю со студенческими работами здесь
4
Пересылка скриншота по сети
Пример универсального обработчика ошибок (автоматически определяет текущий модуль и процедуру) Установка/обновление софта по сети с помощью bat-файла Возможен ли иск к изобретателям платформы сети Интернет и платформ сетевых соединений на базе сети Интернет? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|