2016-09-21 13 views
-2

으로 변환이 PHP 코드 블록을 동등한 C#으로 변환 할 사람이 필요합니다. MT4에서 asp.net 웹 응용 프로그램을 통해 사용자를 등록하기 위해 작업 중입니다. 우리는 사용자 정보를 게시 할 사이트의 PHP 버전이 제공되었습니다. 그에 따라 모든 것이 설정됩니다. 그러나 다음 코드 블록을 변환해야합니다. 온라인 솔루션을 검색하려고했지만 문서 감사를 찾을 수 없습니다.PHP 코드 블록 (fsockopen, fputs, feof, fgets)을 C#

function MQ_Query($query) 
{ 
$ret='error'; 
//---- open socket 
[email protected](T_MT4_HOST,T_MT4_PORT,$errno,$errstr,5); 
//---- check connection 
if($ptr) 
{ 
    //---- send request 
    if(fputs($ptr,"W$query\nQUIT\n")!=FALSE) 
    { 
    //---- clear default answer 
    $ret=''; 
    //---- receive answer 
    while(!feof($ptr)) 
     { 
     $line=fgets($ptr,128); 
     if($line=="end\r\n") break; 
     $ret.= $line; 
     } 
    } 
    fclose($ptr); 
    } 
    //---- return answer 
return $ret; 

} 

하십시오

+0

나는 소켓을 사용하고 if-else 조건을 작성하고 C#에서 순환하는 동안 어떤 문서도 찾을 수 없다고는 생각하지 않습니다. – Sejanus

+0

예 MT4에 너무 구체적으로 "fsockopen"에 대한 소켓을 언급 한 몇 가지 예를 발견했습니다. 시간을 절약하기 위해 어쨌든이 질문을 게시해야합니다. 또한 나는 명시 적으로 이것들을 언급했다. (fsockopen-fputs-feof-fgets) – Khalil

답변

0

는 여기있다. 내가 확신 할 수없는 유일한 것은 EOF를 인식하는 방법입니다. 이 스 니펫을 시도해야합니다. 소켓이 닫히거나 읽을 내용이없는 경우 예외가 발생합니다. 그렇지 않으면 2000 바이트를 읽은 후 128 바이트가 반환됩니다. 당신이 좋아하는 방식으로 배열 할 수 있습니다

private static string T_MT4_HOST = "188.120.127.95"; 
    private static int T_MT4_PORT = 80; 

    public static string MQ_Query(string query) 
    { 
     var i = 0; 
     IPAddress[] IPs = Dns.GetHostAddresses(T_MT4_HOST);    
     var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

     s.Connect(IPs, T_MT4_PORT);    
     s.Send(Encoding.ASCII.GetBytes(String.Format("W{0}\nQUIT\n", query)); 
     var received = new byte[128]; 
     string ret = ""; 
     while (i<100) 
     { 

      s.Receive(received); 
      var r = Encoding.ASCII.GetString(received); 
      if (r.StartsWith("end\r\n")) 
       break; 
      ret += r; 
      i++; 
     } 

     s.Close(); 
     return ret; 
    } 
+0

그렇다. 컴파일되어 실행되지만 루프는 무한하다. 수신 된 데이터 문자가 인식되지 않습니다. 그래도 큰 도움을 주셔서 감사합니다 :). – Khalil