Мне нужен кто-то, чтобы преобразовать этот блок кода 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;
}
пожалуйста
Вот. Единственное, в чем я не уверен, это как распознать 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;
}
Других решений пока нет …