2016-09-21 17 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

 Смежные вопросы

  • Нет связанных вопросов^_^