与 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
下面的代码应该:
- 连接到 teamspeak 服务器
- 发送密码并宣读欢迎信息
发送指令"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
我尝试在 C# 应用程序中使用 telnet 连接到我的 TeamSpeak 3 服务器。
顺便说一句,我对 telnet 的使用不是很熟练 ^^',所以我在网站上展示了 telnet 代码 https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(VS.80).aspx
下面的代码应该:
- 连接到 teamspeak 服务器
- 发送密码并宣读欢迎信息
发送指令"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