Я пытаюсь сделать приложение на C#, которое считывает активность порта IAX2 4569. Я уже создал UDP-и TCP-прослушиватели, но когда я пытаюсь преобразовать UDP data в строку Я нашел некоторые странные коды. Я не знаю, правильно ли я это делаю. Некоторая помощь в этом мне нужна. Этот класс является UDPHeader, из которого я получаю данные.Как конвертировать UDP-заголовок порта IAX2 в читаемую строку
public class UDPHeader
{
//UDP header fields
private ushort usSourcePort; //Sixteen bits for the source port number
private ushort usDestinationPort; //Sixteen bits for the destination port number
private ushort usLength; //Length of the UDP header
private short sChecksum; //Sixteen bits for the checksum
//(checksum can be negative so taken as short)
//End UDP header fields
private byte[] byUDPData = new byte[4096]; //Data carried by the UDP packet
public UDPHeader(byte [] byBuffer, int nReceived)
{
MemoryStream memoryStream = new MemoryStream(byBuffer, 0, nReceived);
BinaryReader binaryReader = new BinaryReader(memoryStream);
//The first sixteen bits contain the source port
usSourcePort = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16());
//The next sixteen bits contain the destination port
usDestinationPort = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16());
//The next sixteen bits contain the length of the UDP packet
usLength = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16());
//The next sixteen bits contain the checksum
sChecksum = IPAddress.NetworkToHostOrder(binaryReader.ReadInt16());
//Copy the data carried by the UDP packet into the data buffer
Array.Copy(byBuffer,
8, //The UDP header is of 8 bytes so we start copying after it
byUDPData,
0,
nReceived - 8);
}}
Следующий У меня есть класс для преобразования данных из UDPHeader в обычный текст. Это конструктор:
public IAXHeader(byte[] byBuffer, int nReceived)
{
MemoryStream memoryStream = new MemoryStream(byBuffer, 0, nReceived);
StringReader stringReader = new StringReader(Encoding.UTF8.GetString(memoryStream.ToArray()));
/** iterate lines of stringReader **/
string aLine = stringReader.ReadLine();
}
Console.WriteLine из Алине это:
Мне нужно знать, что я делаю неправильно, чтобы декодировать байты из IAX2 UDP данных.
Спасибо, я прочитал протокол и изменил код. Данные заголовка IAX2 шифруются и в двоичном формате. Я все еще работаю над шифрованием, но у меня есть некоторые данные, которые мне нужны. Еще раз спасибо. – Lichblitz