-2

このphpコードブロックを同等のC#に変換してくれる人が必要です。asp.net Webアプリケーションを介してユーザーを登録するMT4に取り組んでいます。ユーザー情報を投稿するためのサイトの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

ここにあります。私が確信していない唯一のことは、EOFを認識する方法です。このスニペットを試す必要があります。ソケットが閉じている場合、または読み取るものが何もない場合は、例外をスローする必要があります。それ以外の場合は、128 バイトで 2000 読み取り後に戻ります。これは好きなようにアレンジできます

    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 に答える