|
Модераторы: feodorv |
|
Anbore |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.6.2014 Репутация: нет Всего: нет |
Всем доброго времени суток.
Имеется сервер и клиент. Нужно с клиента переслать бинарный файл на сервер и исполнить его. Файл открывается в бинарном режиме, читает в буфер, делает send. Сервер делает recv и из буфера записывает в файл, потом переименовывает. Пытаюсь переслать и получаю ошибку: "Сделана попытка выполнить операцию на объекте, не являющемся сокетом." клиент
сервер
|
||||
|
|||||
feodorv |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
У Вас в коде замечательно проверяются ошибки, но вот почему-то на fread проверки нет. Хуже того:
Здесь написано: прочитать из otpr_file в buff 200 блоков по 5 байт (подозреваю, что это просто описка))). Итого запрос на 1000 байт, а буфер даёте на 200 байт. Происходит запись прочитанных из файла данных за пределами буфера. Программа при этом не падает, видимо, ничего жизненно важного для процесса не задето, но вот кислород перекрыт - перезаписывается значение переменной sock, которая теперь хранит не идентификатор сокета, а не известно что. Добавлено через 3 минуты и 2 секунды Тут тоже 5. Значит - не описка? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
vol4ek |
|
||||
конь в пальто Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
добавлю
stdio.h
Anbore, открыл недокументированный способ выдирания нужной строки из структуры силой мысли видимо. (LPCSTR)prin_file =) опа, и нет проблем. берите на заметку друзья, много кому понадобится. |
||||
|
|||||
Aoizora |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Лол, прикольно. Тоже когда-то абузил размещение полей структур после прочтения книжки Эриксона, но такие вещи зависят от текущей имплементации библиотеки.
|
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
О чувак, сокеты это такая забавная штука. Вот кажется все должно работать как ты думаешь, а хрен тебе. Ну например recv в лёгкую повесит все приложение если в сокете нет ничего.
send наверное тоже хз. Короче select тебе в помощь ЗЫ. Там реально неадекваты это все делали. Ну нечего читать - верни ты управление. ЗЫЫ. Это про винду Это сообщение отредактировал(а) _zorn_ - 8.12.2016, 21:49 |
|||
|
||||
Aoizora |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Можно же просто в отдельном потоке запустить чтение и обработку.
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |