PDA

Просмотр полной версии : Клиент-сервер C#-PHP


Lavrin
17.09.2015, 17:24
Добра.

Хочу реализовать проект, но пока не знаю точно как.

Идея такова:

На локальном сервере\хостинге лежит сайт.

Клиент на C# раз в какое-то время берет скрин экрана и отправляет на этот сайт (Может POST запросом как-то).

На сайте он выводится.

Взять скрин, преобразовать его в byte[] я, допустим, смогу.

Вопрос: как реализовать получение\отправку файла?

Подскажите, пожалуйста, как это лучше реализовать.

Как в C# составить запрос и обработать его в PHP?

Ткните носом в методы PHP.

ZodiaX
17.09.2015, 17:48
Не проще скрин каким нибудь scp отправлять в определенную папку на сервере?

Lavrin
17.09.2015, 20:43
ZodiaX said:
↑ (https://antichat.live/posts/3892151/)
Не проще скрин каким нибудь scp отправлять в определенную папку на сервере?


Ну, возможно и проще. Вы знаете как это сделать на шарпе проще, чем POST запросом?

ZodiaX
18.09.2015, 09:41
Lavrin said:
↑ (https://antichat.live/posts/3892197/)
Ну, возможно и проще. Вы знаете как это сделать на шарпе проще, чем POST запросом?


Вы не совсем поняли. Зачем на шарпе писать "велосипед", когда можно сделать батник из двух строк. Отправлять скрин проще тем же WinSCP (https://winscp.net/eng/docs/commandline).

hesher
21.09.2015, 14:40
Если Вы уверены, что хотите именно этого, то:

Клиентская часть (C#):


Code:
Rectangle screenDimensions = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
Size s = new Size(screenDimensions.Width, screenDimensions.Height);
Bitmap screen = new Bitmap(s.Width, s.Height);
Graphics memoryGraphics = Graphics.FromImage(screen);
memoryGraphics.CopyFromScreen(0, 0, 0, 0, s);
string fileName = Path.GetTempFileName();
screen.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);

WebClient fileUploader = new WebClient();
fileUploader.UploadFileAsync(new Uri("http://localhost/122/server.php"), "POST", fileName);

Серверная (PHP):

[PHP]
PHP:
[COLOR="#0000BB"][COLOR="#007700"]

Lavrin
21.09.2015, 18:02
[QUOTE="hesher"]
hesher said:
↑ (https://antichat.live/posts/3893416/)
Если Вы уверены, что хотите именно этого, то:
Клиентская часть (C#):

Code:
Rectangle screenDimensions = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
Size s = new Size(screenDimensions.Width, screenDimensions.Height);
Bitmap screen = new Bitmap(s.Width, s.Height);
Graphics memoryGraphics = Graphics.FromImage(screen);
memoryGraphics.CopyFromScreen(0, 0, 0, 0, s);
string fileName = Path.GetTempFileName();
screen.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);

WebClient fileUploader = new WebClient();
fileUploader.UploadFileAsync(new Uri("http://localhost/122/server.php"), "POST", fileName);

Серверная (PHP):
[PHP]
PHP:
[COLOR="#0000BB"][COLOR="#007700"]

Lavrin
21.09.2015, 18:05
Дальше, как я понимаю, нужно создать отдельную html страничку, на которой js будет тягать из этой папки файлы и выводить. Верный ход мыслей, или можно сделать проще?

hesher
21.09.2015, 19:20
Lavrin said:
↑ (https://antichat.live/posts/3893494/)
Дальше, как я понимаю, нужно создать отдельную html страничку, на которой js будет тягать из этой папки файлы и выводить. Верный ход мыслей, или можно сделать проще?


Можно пойти несколькими путями, самый простой (но не самый оптимальный, с точки зрения нагрузки) - при обращении к файлу screens.php в той же папке, где и server.php - он производит сканирование директории картинок и выдает в формате:

Соответственно, можно либо отдельно использовать (обращаться непосредственно к нему, чтобы все картинки посмотреть), либо вставить полученный результат в нужную Вам страницу.

Код screens.php:


PHP:
".PHP_EOL;

В дальнейшем можно будет легко дописать фильтр, который будет только по определенным датам выводить и т.д.

Lavrin
21.09.2015, 20:59
Да, это отлично, но я столкнулся с ещё одной проблемой. Я называл файл просто img.jpg и перед записью просто удаляю предыдущий. Меня это абсолютно утраивает, так как я хочу видеть экран в реальном времени (с интервалом в секунду). Но беда в том, что браузер запоминает имя файла, кешурует, и выводит постоянно первых, хотя после этого я пересохранил файл уже кучу раз. Как это бороть?

hicel
22.09.2015, 14:41
Запрет на кеширование:


PHP:
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: ".date("r"));