2015-12-11 5 views
0

Я пытаюсь подключиться к серверу TeamSpeak 3, используя telnet в приложении C#.Ts3 telnet соединение с C#

Кстати, им не очень опытен с использованием телнет ^^, так что я разоблачил телнет код на сайте https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(VS.80).aspx

Следующий код должен:

  1. подключения к серверу TeamSpeak
  2. отправить пароль и зачитал приветственное сообщение
  3. отправить команду «помощь» и зачитал справку сообщение

    string command = "help"; 
    
        // creates new TCP client 
        TcpClient client = new TcpClient(adress, port); 
    
        // get client stream 
        NetworkStream stream = client.GetStream(); 
    
        // send Password 
        Byte[] data = System.Text.Encoding.ASCII.GetBytes(password); 
        stream.Write(data, 0, data.Length); 
        data = new Byte[256]; 
        Thread.Sleep(200); 
    
        Int32 bytes = stream.Read(data, 0, data.Length); 
        String responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
        Console.WriteLine(responseData); 
    
    
        // send the given command 
        Byte[] data2 = System.Text.Encoding.ASCII.GetBytes(command); 
        stream.Write(data2, 0, data2.Length); 
        data2 = new Byte[2560]; 
        Thread.Sleep(200); 
    
        Int32 bytes2 = stream.Read(data2, 0, data2.Length); 
        String responseData2 = System.Text.Encoding.ASCII.GetString(data2, 0, bytes2); 
        Console.WriteLine(responseData2); 
    
        // end stream and client 
        stream.Close(); 
        client.Close(); 
    

Первый запрос работает как надо и пишет приветственное сообщение в консоль. Но в Int32 bytes2 = stream.Read(data2, 0, data2.Length); в запросе seccond приложение останавливается, не отказываясь от каких-либо выходов.

Может ли кто-нибудь объяснить, почему я не могу прочитать Справочное сообщение?

+0

Если вы не неблагоприятные для использования библиотеки Я пакет NuGet в https://www.nuget.org/packages/ Telnet (код на https://github.com/9swampy/Telnet/), который будет делать все коммуникации telnet для вас ... – 9swampy

+0

Спасибо за предложение, но я всегда счастлив, когда могу реализовать все сам. Чтобы я знал, что делаю. ^^ – Gonios

+0

Да, я тоже такой. Посмотрите на код на Github, если вы все еще застряли. Удачи. – 9swampy

ответ

0

Причина, по которой приложение останавливается, заключается в том, что NetworkStream.Read() будет блокировать, если нет данных, доступных для чтения, и соединение все еще открыто. Обратите внимание, что перед вызовом stream.Read(data2, 0, data2.Length) мы видим, что для свойства stream.DataAvailable установлено значение false.

enter image description here

Теперь, почему нет доступных данных: вы должны прекратить свои команды с питанием линии так, что TeamSpeak знает, что команда завершена:

string command = "help\n"; 

... 

// send the given command 
byte[] data2 = Encoding.ASCII.GetBytes(command); 
stream.Write(data2, 0, data2.Length); 

Ваш первый запрос фактически не успешный выпуск, по той же причине. Приветственное сообщение отправляется сервером при подключении; это не ответ на вашу команду. Кроме того, я не могу увидеть, что значение password, но если вы намерены войти в полной команды является login <username> <password>, например, так:

TS3
Добро пожаловать в интерфейс ServerQuery TeamSpeak 3, типа «помощь "для списка команд и" help < command> "для получения информации о конкретной команде.
Войти ServerAdmin hunter2
ошибка ID = 0 сообщ = ок

Смежные вопросы