我尝试在C#应用程序中使用telnet连接到我的TeamSpeak 3服务器。
顺便说一句,我使用telnet ^^'的经验不是很充实,所以我在网站上显示了telnet代码 https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(VS.80).aspx
以下代码应该:
发送命令“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);
处,应用程序停止而不返回任何异常。
有谁可以解释为什么我不能读出帮助信息?
答案 0 :(得分: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
的值是什么,但如果您打算登录完整命令login <username> <password>
,请执行以下操作:
TS3
欢迎使用TeamSpeak 3 ServerQuery界面,输入&#34; help&#34;获取命令列表和&#34; help&lt; command&gt;&#34;有关特定命令的信息 登录serveradmin hunter2
错误id = 0 msg = ok