Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Клиент-сервер C#-PHP (https://forum.antichat.xyz/showthread.php?t=430389)

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

Не проще скрин каким нибудь scp отправлять в определенную папку на сервере?

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

ZodiaX 18.09.2015 09:41

Цитата:

Сообщение от Lavrin

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

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

hesher 21.09.2015 14:40

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

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

Код:

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]
[COLOR="#000000"][COLOR="#007700"]

Lavrin 21.09.2015 18:02

[QUOTE="hesher"]

Если Вы уверены, что хотите именно этого, то:
Клиентская часть (C#):
Код:

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]
[COLOR="#000000"][COLOR="#007700"]

Lavrin 21.09.2015 18:05

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

hesher 21.09.2015 19:20

Цитата:

Сообщение от Lavrin

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

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

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

Код screens.php:

PHP код:

[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]PHP_EOL[/COLOR][COLOR="#007700"];[/COLOR][/COLOR] 

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

Lavrin 21.09.2015 20:59

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

hicel 22.09.2015 14:41

Запрет на кеширование:

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Cache-Control: no-store, no-cache, must-revalidate"[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Expires: "[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]date[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"r"[/COLOR][COLOR="#007700"]));[/COLOR][/COLOR



Время: 11:36