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

Convert PHP Code Block (fsockopen, fputs, feof, fgets) into C#

我需要有人将此 php 代码块转换为等效的 C#。我们正在开发 MT4 以通过 asp.net 网络应用程序注册用户。我们已经得到 php 版本的站点到 post 的用户信息。每件事都相应地设置。但是需要转换以下代码块。我尝试搜索在线解决方案,但找不到任何文档,谢谢。

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;

 }

在这里。我唯一不确定的是如何识别 EOF。你应该试试这个片段——如果套接字关闭,或者没有任何东西可读,它应该抛出异常。否则,它将在 2000 次读取 128 字节后 return。你可以按你喜欢的方式排列

    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;
    }