gpt4 book ai didi

c# - 从telnet服务器C#套接字读取响应

转载 作者:行者123 更新时间:2023-12-03 12:03:37 24 4
gpt4 key购买 nike

我有以下代码,可以成功地使我打开telnet服务器的套接字并协商适当的握手,如下所示。

Established Connection to 192.168.10.33
FF FD 18 FF FD 20 FF FD 23 FF FD 27 FF FD 24 ÿy.ÿy.ÿy#ÿy'ÿy$
FF FB 03 FF FD 01 FF FD 22 FF FD 1F FF FB 05 FF ÿû.ÿy.ÿy"ÿy.ÿû.ÿ
FD 21 y!
FF FB 01 FF FD 06 FF FD 00 ÿû.ÿy.ÿy.
FF FB 03 FF FB 01 ÿû.ÿû.

困扰我并且似乎遗漏了一些基本信息的地方是如何在上述握手完成后从telnet读回连续的数据流。

这是概念。我发送了一个存储在xml文件中的telnet命令,并希望能够从telnet服务器中读取响应,并将其作为变量,我可以使用该变量将其显示回控制台并发送给应用程序中的其他方法。
有关使用腻子作为客户端的说明,请参见下图:
enter image description here

我也无法收到 0x0D 0x0A Welcome to the Tesira Text Protocol Server 0x0D 0x0A欢迎消息,但是我认为这只是更广泛问题的征兆。

我可以使用以下命令发送命令:
Console.WriteLine("Item: "+item.Attributes["commandText"].Value);
byte[] commandBytes = Encoding.ASCII.GetBytes(item.Attributes["commandText"].Value + " \r\n");
s.Send(commandBytes);

但是我对如何读回数据有些迷惑。
下面的代码是我编写的用于处理套接字连接和握手方面的类。

我只是真的不知道下一步该怎么走,已经花了几个小时环顾了一个我可以理解的好教程,但是没有运气找到真正对我有帮助的东西。
class telnetHandshake
{
private static byte[] writeBuffer;
private static byte[] readBuffer;
private static int bc;

public void telnetInit()
{
IPAddress address = IPAddress.Parse("192.168.10.33");
int port = 23;
IPEndPoint endpoint = new IPEndPoint(address, port);

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
s.Connect(endpoint);
Console.WriteLine("Established Connection to {0}", address);

byte[] readBuffer = new byte[1024];
bc = s.Receive(readBuffer);
//Console.WriteLine(bc + " Bytes Found");
DumpBytes(readBuffer, bc);

writeBuffer = new byte[] { 0xFF, 0xFC, 0x18, 0xFF, 0xFC, 0x20, 0xFF, 0xFC, 0x23, 0xFF, 0xFC, 0x27, 0xFF, 0xFC, 0x24 };
s.Send(writeBuffer);
readBuffer = new byte[1024];
bc = s.Receive(readBuffer);
//Console.WriteLine(bc + " Bytes Found");
DumpBytes(readBuffer, bc);

writeBuffer = new byte[] { 0xFF, 0xFE, 0x03, 0xFF, 0xFC, 0x01, 0xFF, 0xFC, 0x22, 0xFF, 0xFC, 0x1F, 0xFF, 0xFE, 0x05, 0xFF, 0XFC, 0x21 };
s.Send(writeBuffer);
readBuffer = new byte[1024];
bc = s.Receive(readBuffer);
//Console.WriteLine(bc + " Bytes Found");
DumpBytes(readBuffer, bc);

writeBuffer = new byte[] { 0xFF, 0xFE, 0x01, 0xFF, 0xFC, 0x06, 0xFF, 0xFC, 0x00 };
s.Send(writeBuffer);
readBuffer = new byte[1024];
bc = s.Receive(readBuffer);
//Console.WriteLine(bc + " Bytes Found");
DumpBytes(readBuffer, bc);

writeBuffer = new byte[] { 0xFF, 0xFE, 0x03, 0xFF, 0xFE, 0x01 };
s.Send(writeBuffer);

readBuffer = new byte[1024];
bc = s.Receive(readBuffer);
//Console.WriteLine(bc + " Bytes Found");
DumpBytes(readBuffer, bc);
}
catch
{
Console.WriteLine("Connection to {0} Failed!", address);
}
}

我不想使用最少的telnet或任何其他库,我想学习如何完成我已经开始的内容,因为我感觉自己已经接近将其降低到对我的目的有用的程度。

最佳答案

我可以使用以下代码解决问题:

            if (s.Receive(readBuffer) > 0)
{
Console.WriteLine(hex2string(readBuffer, s.Receive(readBuffer)));
}

握手完成后,我只是检查是否有任何新数据,如果有可用数据,我会将其读取到一个将其从HEX转换为ASCII的函数中。

这种方法对我有用,因为代码片段将在之后调用:
byte[] commandBytes = Encoding.ASCII.GetBytes(item.Attributes["commandText"].Value + " \r\n");
s.Send(commandBytes);

因此,每次提交新命令时,总会有一个等待阅读的休止符。

关于c# - 从telnet服务器C#套接字读取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com