将PHP代码块(fsockopen, fputs, fof, fgets)转换为c#

本文关键字:fgets 转换 fof fputs 代码 fsockopen PHP | 更新日期: 2023-09-27 18:07:59

我需要有人把这个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;
 }

将PHP代码块(fsockopen, fputs, fof, fgets)转换为c#

在这里。我唯一不确定的是如何识别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;
    }