-2

我需要有人将此 php 代码块转换为等效的 C#。我们正在开发 MT4 以通过 asp.net 网络应用程序注册用户。我们已经获得了网站的 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;

 }

4

1 回答 1

1

Here it is. The only thing I am not sure about is how to recognize EOF. You should try this snippet - it should throw exception if socket closes, or doesn't have anything to read. Otherwise, it will return after 2000 reads by 128 bytes. You can arrange this the way you like

    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;
    }
于 2016-09-21T11:09:53.393 回答