通过telnet发送数据而无需按Enter

我最近开始弄乱Java套接字和telnet

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

也许如果我让用户输入文字stty cbreakstty raw在运行telnet之前,这行得通吗?(仅知道UNIX!)

如果我可以通过telnet来执行此操作,那么就不必为此专门编写一个特殊的客户端…

回答:

您应该能够通过telnet选项协商来做到这一点。 该协议默认为半双工模式,并且至少对于交互式会话,服务器应协商“

抑制前进”选项和“

回声”选项。

最起码,您可以ff fb 01ff fb 03在会话开始时吐出(会回声,会抑制前进),然后ff fd 01ff fb

01(会回声)回复任何ff fd 03(做回声)并回复任何(做回声,前面)ff fb 03(将抑制前进)。

编辑 以补充本杰克逊提到的线路模式协商是一个更好的答案。对于大多数非23端口连接的客户端,抑制超前运行是不够的。

但是,我认为您遇到的另一个问题是Java正在发送Unicode字符。例如,当你说(char)0xff,爪哇假设你指的是UTF-16字符U+00ffÿ。它可能是使用UTF-8编码通过套接字发送的,所以telnet客户端看到两个字节:c3

bf它继续传递并显示为ÿ

您可以做的是明确告诉Java使用ISO-8859-1编码。例如,您之前可能已经做过这样的事情:

out = new PrintStream(connection.getOutputStream());

out.print((char)0xff); // sends 0xc3 0xbf

out.print((char)0xfb); // sends 0xc3 0xbb

out.print((char)0x01); // sends 0x01

out.flush();

相反,您可以使用OutputStreamWriter指定所需的编码:

out = new OutputStreamWriter(connection.getOutputStream(), "ISO-8859-1");

out.write((char)0xff); // sends 0xff

out.write((char)0xfb); // sends 0xfb

out.write((char)0x01); // sends 0x01

out.flush();

以上是 通过telnet发送数据而无需按Enter 的全部内容, 来源链接: utcz.com/qa/426116.html

回到顶部