C#-PHP套接字连接

标签 c# php sockets

我正在通过服务器上的 php 脚本控制的 pc 上编写程序。我目前正在使用 php 来回 ftp 文件,并使用 c# 读取文件并根据文件中的数据执行命令。然而,这不是一个理想的解决方案。

我希望看到有关如何使用 php 将数据发送到 c# 程序 pver 套接字的教程或示例。

我要发送的数据示例

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

谁能指出我正确的方向?

最佳答案

与其尝试让您的服务器端 PHP 脚本将数据发送到 C# 程序,这会让您头疼不已,为什么不在 PHP 脚本上编写一些内容,在给定对页面的特定请求时输出当前排队的指令?然后 C# 程序可以向页面发出 WebRequest 并接收它的指令。

例如:

== PHP 脚本 ==

<?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;
}

这是一个错误处理最少的粗略模板,希望它足以帮助您入门。

编辑:糟糕,忘了包含示例用法:

MessageBox.Show(QueryServer("get_instructions", new Uri("http://localhost/interop.php")));

关于C#-PHP套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789452/

相关文章:

Java套接字: how the server can reads multiple lines from the client

flash - bytesAvailable,readUTF()和ProgressEvent.SOCKET_DATA

c# - 如何制作俄罗斯方 block 克隆?

c# - 如何不允许 WPF Combobox 为空

php - 处理PHP联系表上的错误

php - 在 Laravels Eloquent 中,如何获取关系记录?

php - 如何使用 PHP 和 MySQL 获得一个 x 列宽的表?

node.js - 连接到两个房间的 Socket Io 用户在同一窗口中从两个房间获取消息

c# - 在 C# 中将标准日期转换为标准波斯日期

c# - 在不同的CPU内核上执行上下文切换和线程