将PHP代码块(fsockopen,fputs,feof,fgets)转换为C#

时间:2016-09-21 10:34:50

标签: c# php code-conversion mt4

我需要有人将这个PHP代码块转换为等效的C#。我们正在研究MT4通过asp.net web应用程序注册用户。我们已经获得了该网站的php版本来发布用户信息。每件事都是相应的设置。但是需要转换以下代码块。我试图搜索在线解决方案,但找不到任何文档谢谢。

function MQ_Query($query)
{
$ret='error';
//---- open socket
$ptr=@fsockopen(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;

 }

1 个答案:

答案 0 :(得分: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;
    }