Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 远程登录时如何屏蔽用户输入?_C#_Sockets - Fatal编程技术网

C# 远程登录时如何屏蔽用户输入?

C# 远程登录时如何屏蔽用户输入?,c#,sockets,C#,Sockets,我有一个套接字应用程序。客户端连接的套接字使用不允许查找的NetworkStream 那么,既然NetworkStream不提供搜索功能,当用户远程登录到我的套接字服务器时,我如何屏蔽用户输入 1.)它需要与第三方telnet合作,即:我没有创建telnet客户端 2.)我可以满足于在telnet客户端中不显示任何内容,但更喜欢屏蔽 提前感谢。Telnet协议可以同时支持“本地回显”和“远程回显”。通常现在,一切都是通过远程echo完成的(这更好地支持交互式行编辑功能)。这意味着服务器负责将键入

我有一个套接字应用程序。客户端连接的套接字使用不允许查找的NetworkStream

那么,既然NetworkStream不提供搜索功能,当用户远程登录到我的套接字服务器时,我如何屏蔽用户输入

1.)它需要与第三方telnet合作,即:我没有创建telnet客户端 2.)我可以满足于在telnet客户端中不显示任何内容,但更喜欢屏蔽


提前感谢。

Telnet协议可以同时支持“本地回显”和“远程回显”。通常现在,一切都是通过远程echo完成的(这更好地支持交互式行编辑功能)。这意味着服务器负责将键入的内容发送回客户端,以便客户端可以在屏幕上显示

因此,要支持“掩蔽”,则:

  • 为键入的每个字符发回类似
    *
    的内容
  • 当客户端键入密码时,不要将任何内容发送回客户端

我假设您正在利用本地echo(telnet客户端默认使用本地echo)。telnet协议有一个带外控制命令结构,您可以使用它来切换(请参阅)。特别是,您需要暂时关闭本地echo,这样用户的telnet客户端就不会简单地将字符放在屏幕上。您可以在希望其客户端停止显示字符时发送IAC WILL NOT ECHO命令,然后再发送IAC WILL ECHO命令重新启动(请参阅)

基本上,您只需要发送三个字节:0xFF 0xFC 0x01以关闭回显,三个字节:0xFF 0xFB 0x01以重新打开回显


如果需要,在关闭echo的同时,可以为读取的每个字符向用户发送一个“*”字符。这会给他们显示他们的字符正在被接收,尽管对于密码,我更喜欢不回显。

你说的“屏蔽”是什么意思?当用户键入字符时,显示*而不是应该是
IAC do echo/don echo
?实际上,重读RFC 857,我认为服务器应该发送will echo,它通知客户端它(服务器)将提供回显(意味着客户端应该停止),然后它应该发送不回显,告诉客户端它将停止回显(因此客户端应该再次执行本地回显)