【问题标题】:Ts3 telnet connection with C#ts3 telnet 与 C# 的连接
【发布时间】:2015-12-16 06:30:07
【问题描述】:

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

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

以下代码应该:

  1. 连接到 teampeak 服务器
  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); 处,应用程序停止,没有返回任何异常。

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

【问题讨论】:

  • 如果您不反对使用库,我有一个位于 nuget.org/packages/Telnet 的 NuGet 包(代码位于 github.com/9swampy/Telnet),它可以为您完成所有 telnet 通信......
  • 感谢您的提议,但是当我可以自己实现所有这些时,我总是很高兴。这样我就知道我在做什么。 ^^
  • 是的,我也有点这样。如果您仍然卡住,请查看 Github 上的代码。祝你好运。

标签: c# telnet teamspeak


【解决方案1】:

应用程序似乎停止的原因是因为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的值是什么,但是如果你打算登录完整的命令是login <username> <password>,像这样:

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

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2017-07-26
    • 2020-10-03
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多