【问题标题】:Socket programming and telnet with VB.net使用 VB.net 进行套接字编程和 telnet
【发布时间】:2010-12-01 22:03:44
【问题描述】:

我正在 VB.net 中编写一个基于 GUI 的应用程序,它通过 telnet 与 LambdaMOO 服务器通信,发送命令以显示对象层次结构,然后解析输出并创建对象层次结构的可视化表示。

所以我的问题是:.NET 是否有某种“telnet 客户端”类来简化数据的发送和接收,还是我必须使用套接字 API 自己编写?

Mono 有这样的东西吗?

除非有一个简单的解决方案,有没有人可以指点在 VB.net 中进行 telnet 客户端编程的好教程?

【问题讨论】:

    标签: vb.net sockets telnet


    【解决方案1】:

    好的,我遇到了类似的问题,忽略了所有安全问题等,想从 VB 发起的连接到远程设备进行 TELNET 并做一些事情。我同意整个谈判过程是一件地狱般的事情,但是一旦你解决了它实际上很容易实现。我决定不停下来,因为我一直在读那些说如果你可以在网络流中写入和读取 1 和 0 以及从网络流中读取 1 和 0 显然可以完成的事情。

    下面链接中的代码将启动连接并引导您通过 TELNET 实际交换明文信息。给定发送用户名和密码组合的示例,显示了如何读取和写入连接。

    大提示 - 最初有一个漂亮的大文本框或其他东西来捕获进入缓冲区的所有内容(变量 returndata)。这将帮助您诊断问题。还要在我的博客上查看如何在文本框不闪烁的情况下做到这一点。一旦你完成了所有这些并且你知道你的脚本是可靠的,关闭任何屏幕更新,它会快速通过而不是花费时间。

    为真正肮脏的代码和糟糕的网站布局道歉。

    http://myhead-online.blogspot.com/2009/05/vb-net2008-express-telnet-to-sun.html

    【讨论】:

      【解决方案2】:

      telnet protocol 基本上只是普通的 TCP 协议,带有一堆您可能不需要实现的可选内容。因此,您将打开一个套接字并开始使用套接字流接口发送和接收数据。

      尝试使用常规的套接字 API,您可能会发现它非常简单。

      【讨论】:

      • 我在快速搜索中看到的所有内容都是付费解决方案,所以我同意。向上
      • 我开始按照您的建议进行操作,但发现 API 的行为有些奇怪。我希望有人用更高级别的“telnet 客户端”类编码了所有的怪异之处,所以我不必学习套接字的怪癖或 telnet 的怪癖。我基本上希望能够用 VB 编写一个 telnet 会话,并解析返回的数据。
      • 也许您可以描述您遇到的“怪事”,然后有人会为您指出正确的方向。 Telnet 是较简单的网络协议之一,因此您遇到的任何问题都可能会在其他地方出现。花时间了解套接字 API 等常见级别的工作原理是值得的。
      • 给你一个预览:当我做一个 NetworkStream.Read() 它只给我来自服务器的第一行输出,而不是所有输出(我的服务器发送十二行文本只要你连接到它)。是的,我的缓冲区足够大,可以容纳比第一行更多的东西。如果我第二次调用 NetworkStream.Read(),它将为我获取其余的输出。现在,在您告诉我将其放入循环之前,我已经这样做了,就像示例代码一样。不工作。我必须在循环外调用 .Read() 一次。这就是我所说的怪异之处。
      【解决方案3】:

      只是一个建议。您可以尝试对您的 vb 应用程序进行编程,以批处理模式执行现有的 telnet 应用程序。

      这里是link 供您参考。请参阅 7.3 在批处理文件和脚本中使用 Plink。希望对您有所帮助。

      【讨论】:

      • 我看了看那里,并没有找到告诉 Plink 如何与服务器交互的方法(脚本通过 vb.net 在已经打开的连接上运行 plink 操作)。更多的澄清将是有帮助的。谢谢。
      【解决方案4】:

      您可以使用任意数量的库之一。这是一个库:

      LINK

      对于其他人,请尝试搜索以下内容:library telnet mud .NET

      最后,有许多开源 MUD/MOO/MUSH 项目随时开放,他们愿意分享想法并寻找帮助项目的人。

      【讨论】:

        【解决方案5】:

        我试用了 telnet。您必须结合使用诸如 wireshark 之类的工具来确定需要启动哪些命令。我确实发现与我的 unix box 进行通信是一个很大的挑战。一方面,您必须了解您的 telnet 指令。您可能会发现很难确定应用程序的状态 - 是否先天登录。您必须为此制定自己的逻辑。

        您必须做的另一件事是将 telnet 返回的字节解析为命令或指令数据,即您必须知道收到的字节是指令还是它试图发送给您的其他东西。 Here 是一个可以派上用场的参考。

        首先,我建议您开始使用wireshark 工具,手动和通过应用程序来回发送通信。

        【讨论】:

          【解决方案6】:

          您可以查看Expect command 这是一个可编写脚本的解决方案,用于在远程机器上运行 telnet、ftp 等。然后,您可以编写期望连接和检索数据的脚本。

          这将消除管理套接字和协议的所有复杂性。

          【讨论】:

          • 似乎链接没有去任何地方。
          【解决方案7】:

          从 LambdaMOO 的角度来看,如果您具有向导访问权限或与具有此权限的某人成为朋友,您可以让 MOO 通过您可能更容易使用的另一种协议(例如 HTTP)为您提供数据。您所需要的只是 MOO 上的一个对象,其中设置了一个 do_login_command() 来处理请求,然后使用 listen() 内置函数让该对象在给定端口上侦听。只要协议不需要任何复杂的 SSL,在 MOO 端编写代码就相当容易。因此,如果 VB.net 更容易处理 HTTP 等,这可能是值得的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多