与 C# 的 Ts3 telnet 连接

Ts3 telnet connection with C#

我尝试在 C# 应用程序中使用 telnet 连接到我的 TeamSpeak 3 服务器。

顺便说一句,我对 telnet 的使用不是很熟练 ^^',所以我在网站上展示了 telnet 代码 https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(VS.80).aspx

下面的代码应该:

  1. 连接到 teamspeak 服务器
  2. 发送密码并宣读欢迎信息
  3. 发送指令"help"并读出帮助信息

        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);,应用程序停止而不返回任何异常。

谁能解释一下为什么我无法读出帮助信息?

应用程序似乎停止的原因是因为 NetworkStream.Read() will block if there is no data available to read and the connection is still open. Note that before calling stream.Read(data2, 0, data2.Length), we can see that the stream.DataAvailable 属性 设置为 false

现在,关于为什么没有可用数据:您需要使用换行符终止命令,以便 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
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
login serveradmin hunter2
error id=0 msg=ok