2013-01-31 136 views
0

我有一個web服務,它連接到服務器並返回結果爲xml或json。它是用asp.net編寫的。我想在php中使用相同的。在php的tcp客戶端連接

using (TcpClient tcpClient = new TcpClient()) 
    { 
     tcpClient.Connect("1.1.1.1", port: 42011); 
     string search = "search^10|5|2|1^gagl^55592a782ce899d2" + 
System.Environment.NewLine; 
     using (NetworkStream ns = tcpClient.GetStream()) 
     { 
      byte[] bytes = ASCIIEncoding.ASCII.GetBytes(search); 
      ns.Write(bytes, 0, bytes.Length); 
      string result = ReadBuffer(ns); 

      // [.. consume result XML string ..] 

     } 
     tcpClient.Close(); 
    } 
     } 
protected string ReadBuffer(NetworkStream ns) 
{ 
    byte[] lenghtBuffer = new byte[4]; 
    int bytesRead = 0; 
    while (bytesRead < 4) 
     bytesRead += ns.Read(lenghtBuffer, bytesRead, 4 - bytesRead); 
    if (BitConverter.IsLittleEndian) 
     Array.Reverse(lenghtBuffer); 
    int responseLength = BitConverter.ToInt32(lenghtBuffer, 0); 
    byte[] buffer = new byte[responseLength]; 
    bytesRead = 0; 
    while (bytesRead < responseLength) 
     bytesRead += ns.Read(buffer, bytesRead, responseLength - bytesRead); 
    string result = ASCIIEncoding.ASCII.GetString(buffer, 0, bytesRead); 
    return result; 
} 

上述代碼以.net形式返回值。如何使用相同的值在php中獲得結果。

+0

\ n」;其他{ } else { $ out =「GET/HTTP/1.1 \ r \ n」; $ out。=「Host:1.1.1.1 \ r \ n」; $ out。=「連接:關閉\ r \ n \ r \ n」; fwrite($ fp,$ out);同時(!feof($ fp)){ff(128)); } fclose($ fp); } ?>這沒有工作 –

回答

0

可以使用的fsockopen(http://php.net/manual/fr/function.fsockopen.php)打開TCP連接並檢索結果。

+0

我試過了。 \t <?php $ fp = fsockopen(「1.1.1.1」,42011,$ errno,$ errstr,30); if(!$ fp){echo「$ errstr($ errno)
\ n」; } else {$ out =「GET/HTTP/1.1 \ r \ n」; $ out。=「主機:1.1.1.1 \ r \ n」; $ out。=「連接:關閉\ r \ n \ r \ n」; fwrite($ fp,$ out); while(!feof($ fp)){echo fgets($ fp,128); } fclose($ fp); }?>這個沒有工作 –

+0

你有什麼錯誤嗎? – ioan

+0

是的,我可以通過端口連接到IP。我也得到了答覆 - 「403未經授權的訪問」。這是因爲字符串「search^10 | 5 | 2 | 1^gagl^55592a782ce899d2」沒有正確傳遞。 55592a782ce899d2這是服務器驗證的值。 –