Воскресенье, 24 Ноября 2024, 22:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как отправить файл клиенту с помощью 39DLL?
Quad69Дата: Пятница, 13 Марта 2015, 21:35 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Здравствуйте.
Я вот только что пробовал передать клиенту обычную png картинку, но ничего не получилось.
Я перевёл каждый символ в цифру, пользуясь ord(x) и отравил всё это клиенту.
Дальше уже в клиенте я всё записывал в файл используя chr(x)
Проверьте что не так:
P.s Я тот человек который сидит на gm8

Скрипт writefile:


Скрипт readfile:


За помощь плюс.
QvantДата: Пятница, 13 Марта 2015, 22:01 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
39DLL может загрузить файл в свой буфер , потом передай его содержание по сети клиенту и сохрани содержимое буфера клиента как файл.
Всё!
Quad69Дата: Пятница, 13 Марта 2015, 22:08 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Qvant, Да ладно? Я знаю что он может сохранить в свой буфер и передать, но как я только не пробовал, ничего не получалось. Даже стандартными скриптами в 39DLL

Добавлено (13 марта 2015, 22:08)
---------------------------------------------
P.s Передаётся только часть файла

QvantДата: Суббота, 14 Марта 2015, 00:19 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата maksim1221232 ()
P.s Передаётся только часть файла

-Не люблю я этих кошек. -Просто ты не умеешь их готовить.

ты просто неправильно делаешь - наверняка в шаге проверяешь буфер , и если он не пустой то начинаешь с ним работать.
А за один шаг все данные могут и не придти !

1)сначала отсылай байты размер буфера
2)потом отсылаем буфер пакетами по 8192 байтов (или меньше)
3)в клиенте проверяй стал ли буфер равным байтам которые приняли из 1) пункта
если он меньше , то ничего не делаем
а как только буфер станет равным - сохраняем буфер в файл , это и будет картинка.


Сообщение отредактировал Qvant - Суббота, 14 Марта 2015, 00:23
last2424Дата: Суббота, 14 Марта 2015, 00:42 | Сообщение # 5
30 мл. блоков
Сейчас нет на сайте
maksim1221232, почему нельзя передать содержимое буфера и название буфера?
Кода возможно будет больше, за то точно будет работать.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Quad69Дата: Суббота, 14 Марта 2015, 01:22 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Qvant,
Цитата last2424 ()
за один шаг все данные могут и не придти !

Я знаю. Я думал что игра может затормозить на время, но главное что файл придёт целым.

Цитата Qvant ()
1)сначала отсылай байты размер буфера
2)потом отсылаем буфер пакетами по 8192 байтов (или меньше)
3)в клиенте проверяй стал ли буфер равным байтам которые приняли из 1) пункта
если он меньше , то ничего не делаем
а как только буфер станет равным - сохраняем буфер в файл , это и будет картинка.

Я тут не очень всё понял. Ты имеешь в виду что надо передавать файл по 8Кб?
P.s Извини за мою тупость
Можете мне разъяснить всё по подробнее, или пример какой нибуть дать...
maker-rusДата: Суббота, 14 Марта 2015, 03:07 | Сообщение # 7
Гений
Сейчас нет на сайте
Цитата maksim1221232 ()
Я тут не очень всё понял. Ты имеешь в виду что надо передавать файл по 8Кб?
P.s Извини за мою тупость
Можете мне разъяснить всё по подробнее, или пример какой нибуть дать...

Тебе наверное хотели сказать, что сначала отошли клиенту размер данных, которые отправляешь, а потом отправляй файл кусочками.На стороне клиента проверяй, равен ли текущий объем данных - отправляемому, если нет, то продолжаешь слать данные пока количество принятых данных не станет равно отправленным. Размер кусочков, которые ты можешь отправлять за один раз написали для примера, ты можешь использовать свой(размер).


Сообщение отредактировал maker-rus - Суббота, 14 Марта 2015, 03:08
Quad69Дата: Суббота, 14 Марта 2015, 10:22 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Хорошо, я понял теперь как сделать.
Только можете ещё скрипты мои проверить?
QvantДата: Суббота, 14 Марта 2015, 11:52 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Цитата maksim1221232 ()
Ты имеешь в виду что надо передавать файл по 8Кб?

Максимальный размер пакета UDP

поэтому приходится на передающей стороне "разбивать" на кусочки , а на другой стороне "склеивать"
Quad69Дата: Суббота, 14 Марта 2015, 12:11 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Цитата Qvant ()
Максимальный размер пакета UDP

Я использую TCP.
Или это всё одно и тоже?
P.s Я про вес пакета который они могут передать

Добавлено (14 марта 2015, 12:11)
---------------------------------------------
И почему они не могут передать такой вес? Картинка всего то весит 6кб, я уже пытаюсь передать вообще 180байт, вроде бы приходит, но картинку открыть нельзя.
Раньше я когда делал игры, передавал карты весом 23кб и ничего, всё полностью приходило без всяких ошибок.

QvantДата: Суббота, 14 Марта 2015, 12:16 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
надеюсь байты которые отправляются как размер картинки ты не сохраняешь вместе с данными из буфера в файл
Quad69Дата: Воскресенье, 15 Марта 2015, 01:08 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Цитата Qvant ()
надеюсь байты которые отправляются как размер картинки ты не сохраняешь вместе с данными из буфера в файл

Нет, я не отправляю никакие размеры файла.
У меня в начале передаётся название, а далее читается строка из файла, символы в которой переводятся в цифры и записываются в буфер.
Когда строка прочитана, в буфер записывается число 60000 что бы клиент понял что дальше надо всё писать с новой строки, а когда полностью прочитан файл, записывается 60001.
Далее клиент принимает, он создаёт файл с именем который отправил ему сервер, и начинает всё записывать в него переводя цифры в буквы которые отправил ему сервер.

Добавлено (14 марта 2015, 13:25)
---------------------------------------------
Всё, вроде бы получилось, но появилась одна неудобная вещь: Когда клиенту приходит файл, он сохраняет его себе, но зачем то в конце добавляет пробел.
Из за этого файл весит на 2байта больше. Если так передать картинку, то она может не работать.
Как это исправить?
Вот скрипты:


Добавлено (15 марта 2015, 01:08)
---------------------------------------------
Всё, решил проблему!

Я воспользовался стандартными функциями 39dll типа fileopen, filesize и т.д.
Вот сами скрипты:




Сообщение отредактировал maksim1221232 - Воскресенье, 15 Марта 2015, 01:20
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг