2012-03-20 254 views
4

我正在通過服務器上的php腳本控制的pc上編寫程序。我目前使用php來回傳輸文件,並使用c#讀取文件並根據文件中的數據執行命令。然而,這不是一個理想的解決方案。C#-PHP套接字連接

我想看看如何使用PHP將數據發送到C#程序pver套接字的教程或示例。

數據的例子我想送

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

任何人都可以點我在正確的方向?

回答

2

與其嘗試讓服務器端的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; 
} 

這是一個粗略的模板,只有很少的錯誤處理,希望它足以讓你開始。

編輯:Woops,忘了包括示例用法:

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

您可以使用PHP的soap extensions創建一個SOAP WebService,您可以輕鬆地從您的C#調用。就像你已經鍵入訪問,你不必創建自己的協議。