Autor Thema: Telnet Client / Verbindung mit TeamSpeak 3 ServerQuery  (Gelesen 1275 mal)

TheBrownShape

  • Mitglied
  • Beiträge: 2
  • Bewertung: 0
    • TheBrownShape.DE
Telnet Client / Verbindung mit TeamSpeak 3 ServerQuery
« am: August 21, 2015, 12:59:38 »
Hallo,

ich möchte einen TeamSpeak 3 Bot bauen und muss dazu eine Verbindung zur ServerQuery herstellen. Der Server läuft (auf meinem eigenen Rechner, also localhost), ich kann auch mit "telnet localhost 10011" im Terminal/cmd.exe super eine Verbindung aufbauen und alles funktioniert perfekt. Mit einem sf::TcpSocket baue ich eine Verbindung zur ServerQuery auf, allerdings ist der Status dauerhaft auf "Not Ready", warum auch immer. Jedenfalls kann ich trotz "Not Ready" die Anfangsnachricht ("Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command") empfangen und danach auch etwas an den Server senden, ich sende als Beispiel "help". Normalerweise kommt dann eine Liste mit allen verfügbaren Commands, doch ich erhalte leider keine Antwort mehr vom Server / von der ServerQuery.

Hier der Code den ich zum Herstellen der Verbindung verwende:
sf::TcpSocket tcp;
sf::Socket::Status status;
status = tcp.connect(sf::IpAddress::LocalHost, 10011);
std::string statusmsg;

switch (status)
{
case sf::Socket::Done:
statusmsg = "DONE";
case sf::Socket::Error:
statusmsg = "ERROR";
case sf::Socket::Disconnected:
statusmsg = "DISCONNECTED";
case sf::Socket::NotReady:
statusmsg = "NOT READY";
}

std::cout << "Status: "<< statusmsg << std::endl;

Warum ist der Status immer auf "NOT READY" ? Der Server läuft, ich kann über das Terminal wie gesagt perfekt eine Verbindung aufbauen.

char buffer[1024];
std::size_t received = 0;
tcp.receive(buffer, sizeof(buffer), received);
std::cout << "Antwort: " << buffer << std::endl;

std::string message = "help";
tcp.send(message.c_str(), message.size() + 1);
std::cout << "SENT" << std::endl;

received = 0;
tcp.receive(buffer, sizeof(buffer), received);
std::cout << "Antwort: " << buffer << std::endl;

Ausgabe ist dann:

Status: NOT READY
Antwort: TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.

SENT

Da tcp.receive() und tcp.send() ja blockende Funktionen sind und "SENT" ausgegeben wird, kann ich doch sicher sein, dass dass Paket versendet wurde, oder ? Allerdings wartet dann das Programm ewig auf eine Antwort, bleibt also in tcp.receive() "stecken". Ich kann mir vorstellen, dass das alles an dem "NOT READY"-Status des Sockets liegt, aber wieso ist er denn "Not Ready" ? Der Server läuft, ich kann über das Terminal einwandfrei eine Verbindung aufbauen.

Ich freue mich über jede hilfreiche Antwort!

Mit freundlichen Grüßen
TheBrownShape

TheBrownShape

  • Mitglied
  • Beiträge: 2
  • Bewertung: 0
    • TheBrownShape.DE
Re: Telnet Client / Verbindung mit TeamSpeak 3 ServerQuery
« Antwort #1 am: August 25, 2015, 15:19:11 »
//Close

(keine Berechtigung meinen Post zu löschen ...)

K-Bal

  • Globaler Moderator
  • Mitglied
  • Beiträge: 485
  • Bewertung: 2
    • Listen!
Re: Telnet Client / Verbindung mit TeamSpeak 3 ServerQuery
« Antwort #2 am: Dezember 27, 2015, 19:29:10 »
Hat sich wahrscheinlich schon erledigt, aber Du benutzt in Deinem switch-Statement keine breaks ;-)