0

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

顺便说一句,我使用 telnet ^^' 的经验不是很丰富,所以我在站点 https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(VS. 80).aspx

以下代码应:

  1. 连接到 teampeak 服务器
  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);第二个查询中,应用程序停止而不返回任何异常。

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

4

1 回答 1

0

应用程序似乎停止的原因是,NetworkStream.Read()如果没有可读取的数据并且连接仍然打开,则会阻塞。请注意,在调用之前stream.Read(data2, 0, data2.Length),我们可以看到该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是什么,但如果您打算登录完整的命令 is login <username> <password>,如下所示:

TS3
欢迎使用 TeamSpeak 3 ServerQuery 界面,键入“help”获取命令列表,键入“help <command>”获取特定命令的信息。
登录 serveradmin Hunter2
错误 id=0 msg=ok

于 2015-12-11T23:52:34.530 回答