Разъем C # -PHP - PullRequest
       22

Разъем C # -PHP

4 голосов
/ 20 марта 2012

Я пишу программу на ПК, которая управляется через php-скрипт на сервере.В настоящее время я использую php для ftp файла туда-сюда и использую c # для чтения файла и выполнения команд на основе данных в файле.Однако это не идеальное решение.

Я хотел бы увидеть учебник или пример о том, как использовать php для отправки данных в сокеты p # программы ac #.

Пример данных, которые мне бы хотелосьотправить

1:control1
1:control2
1:control3
0:control4
0:control5

Может кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Вместо того, чтобы пытаться заставить ваш серверный PHP-скрипт отправлять данные в программу на C #, что доставит вам кучу головных болей, почему бы не написать что-то в PHP-скрипте, который при конкретном запросе к странице выводит текущие инструкции в очереди? Затем программа C # может просто отправить веб-запрос на страницу и получить инструкции.

Например:

== PHP SCRIPT ==

<?php
    //main execution.
    process_request();

    function process_request()
    {
        $header = "200 OK";
        if (!empty($_GET['q']) && validate_request())
        {
            switch ($_GET['q'])
            {
                case "get_instructions":
                    echo get_instructions();
                    break;
                case "something_else":
                    //do something else depending on what data the C# program requested.
                    break;
                default:
                    $header = "403 Forbidden"; //not a valid query.
                    break;
            }
        }
        else { $header = "403 Forbidden"; } //invalid request.
        header("HTTP/1.1 $header");
    }

    function validate_request()
    {
        //this is just a basic validation, open to you for how you want to validate the request, if at all.
        return $_SERVER["HTTP_USER_AGENT"] == "MyAppName/1.1 (Instruction Request)";
    }

    function get_instructions()
    {
                    //pseudo function, for example purposes only.
        return "1:control1\n1:control2\n1:control3\n0:control4\n0:control5";
    }
?>

Теперь для фактического получения данных из запроса:

== C # Код клиента ==

private string QueryServer(string command, Uri serverpage)
{
    string qString = string.Empty;

    HttpWebRequest qRequest = (HttpWebRequest)HttpWebRequest.Create(serverpage.AbsoluteUri + "?q=" + command);
    qRequest.Method = "GET";
    qRequest.UserAgent = "MyAppName/1.1 (Instruction Request)";

    using (HttpWebResponse qResponse = (HttpWebResponse)qRequest.GetResponse())
        if (qResponse.StatusCode == HttpStatusCode.OK)
            using (System.IO.StreamReader qReader = new System.IO.StreamReader(qResponse.GetResponseStream()))
                qString = qReader.ReadToEnd().Trim(); ;

    return qString;
}

Это грубый шаблон с минимальной обработкой ошибок, надеюсь, этого достаточно, чтобы начать работу.

РЕДАКТИРОВАТЬ: Woops, забыл включить пример использования:

MessageBox.Show(QueryServer("get_instructions", new Uri("http://localhost/interop.php")));
0 голосов
/ 20 марта 2012

вы можете использовать мыльные расширения для PHP, чтобы создать веб-сервис SOAP, который вы можете легко вызвать из своего C #.Например, вы набрали доступ и вам не нужно создавать собственный протокол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...