Я пишу (надеюсь, простое) консольное приложение для отправки команд аудиоустройству, работающему через telnet. Эти команды позволяют мне изменять состояние компонентов DSP, содержащихся в нем, например: ToneGen set mute true
.Выполнение рукопожатия Telnet
У меня возникли проблемы с рукопожатием telnet, я понимаю, что есть несколько команд, отправленных с сервера Telnet клиенту, и что клиент должен ответить на них, чтобы успешно согласовать начало сеанса , Я просто не знаю, как отправить правильные команды. Ниже приведена моя неудачная попытка.
Вот код, который я до сих пор:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace telnetTest
{
class Program
{
static void Main(string[] args)
{
IPAddress address = IPAddress.Parse("192.168.10.101");
int port = 23;
IPEndPoint endpoint = new IPEndPoint(address, port);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("Establishing Connection to {0}", address);
s.Connect(endpoint);
byte[] Bytes = Encoding.ASCII.GetBytes("0xFC\0xFC\0XFC");
s.Send(Bytes);
byte[] buffer = new byte[50];
s.Receive(buffer);
Console.WriteLine(Encoding.ASCII.GetString(buffer));
Console.ReadKey();
}
}
}
Выход из кода выглядит следующим образом:
Establishing Connection to 192.168.10.101
??↑?? ??#??'??$
Так что я думаю, что у меня есть две основные проблемы здесь:
1) Как определить запрос квитирования с аудиоустройства 2) Как отправить соответствующий ответ.
Любая помощь была бы принята с благодарностью.
ОБНОВЛЕНИЕ 1
byte[] buffer = new byte[1024];
int vari = s.Receive(buffer);
string hex1 = vari.ToString("X");
Console.WriteLine(hex1);
После подключения hex1 возвращает значение 15
ОБНОВЛЕНИЕ 2
Console.WriteLine("Sending Bytes");
byte[] Bytes1 = Encoding.ASCII.GetBytes("0xFF 0xFC 0x18 0xFF 0xFD 0x20 0xFF 0xFC 0x23 0xFF 0xFD 0x27 0xFF 0xFC 0x24 \n");
s.Send(Bytes1);
После указанного кода Ищу следующего ответа от на сервере, используя следующий код:
byte[] buffer2 = new byte[1024];
int byteCount2 = s.Receive(buffer2);
Console.WriteLine(byteCount2 + " Bytes Found");
Все, что я вижу в консоли Фраза «Отправка Bytes», так что кажется, что Bytes1
не пересылается, и нет никаких дополнительных байтов ответа для чтения.
Подсказка: взять отладчик и проверить массив 'Bytes' содержит байты, которые вы ожидаете. Подсказка # 2: всегда отбирайте отладчик и проверяйте, что каждая переменная имеет ожидаемое значение в каждый момент времени, пока выполняется ваша программа. – zerkms
@zerkms - Итак, я подключил отладчик и обнаружил значение, указанное в обновлении 1 в исходном сообщении, _if_ ответ F, хранящийся в 'hex1' (hex/int 15), равен 0xFF, тогда кажется, что я прав отслеживать при рассмотрении процедуры согласования примера в следующем [link] (https://support.biamp.com/Tesira/Control/Telnet_session_negotiation_in_Tesira). Я не уверен, действительно ли это правильно, или если моя логика ошибочна? – Majickal
Я верю 's.Receive' возвращает вам * длину * полученного запроса. Итак, '15' - сколько байтов получено. – zerkms