[英]C#-PHP socket connection
我在通过服务器上的php脚本控制的PC上编写程序。 我目前正在使用php来回传输ftp文件,并使用c#读取文件并基于文件中的数据执行命令。 但是,这不是理想的解决方案。
我想查看有关如何使用php将数据发送到ac#程序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")));
您可以使用PHP的soap扩展来创建SOAP WebService,可以从C#轻松调用它。 这样,您就可以输入访问权限,而不必创建自己的协议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.