java - 无需按回车即可通过 telnet 发送数据

标签 java sockets terminal telnet

我最近开始研究 Java 套接字和 telnet...

我希望用户能够连接到服务器,只需键入一个字母并将其发送到服务器,而无需按回车键发送。我确定服务器没有办法设置它,但也许 telnet 有一个参数或可以允许这样做的东西?

也许如果我让用户在运行 telnet 之前键入 stty cbreakstty raw,这会起作用吗? (仅限 UNIX,我知道!)

如果我可以让 telnet 执行此操作,那么我就不必为此功能编写一个特殊的客户端...

最佳答案

实际上服务器请求这个的方法:它被称为telnet option negotiation .当您使用端口 23 和其他端口上的“cooked”(或“line”)模式时,telnet 通常会默认将本地 tty 配置为“原始”模式。行模式是您进行极简本地编辑的地方,当您按回车键时发送数据。

一旦禁用了线路模式,您就可以单独配置诸如本地回显之类的东西。

编辑:我认为合理的顺序是:

255, 253, 34,  /* IAC DO LINEMODE */
255, 250, 34, 1, 0, 255, 240 /* IAC SB LINEMODE MODE 0 IAC SE */
255, 251, 1    /* IAC WILL ECHO */

启用 TELOPT_LINEMODE (34),然后将行模式 LM_MODE 设置为 0(我认为这是告诉客户端的正确方法不要对任何本地编辑进行操作)。最后它说 WILL ECHO 表示服务器将回显(因此客户端不会)。

客户端(如果它支持 telnet 协商)将回复类似 IAC blah blah 的序列或像 IAC SB ... IAC SE 这样的“引用”序列,你可以检测并过滤掉您的输入流。

关于java - 无需按回车即可通过 telnet 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532344/

相关文章:

java - 删除 Hibernate 生成的延迟初始化代理的最安全方法是什么?

C - 如何确定 JSON 消息的字节数

postgresql - 如何向世界开放我的 Postgres 数据库

java - 如何使用 Java 套接字 HTTP/1.1 请求下载图像?

java - 从颜色选择器获取错误的颜色值

c++ - 跨平台 C++ UDP 套接字库

linux - 如何获得光标在终端中的位置?

heroku - 如何查看没有时间戳/额外信息的 Heroku 日志?

linux - cURL 命令 - 如何检查网络下载速度

java - 找出线程被阻塞的位置