我有一个最简单的C#程序,它从NetworkStream读取字节并将它们的文本表示发回:
using System.Net;
using System.Net.Sockets;
using System.Text;
var listener = new TcpListener(IPAddress.Any, 5050);
listener.Start();
var client = listener.AcceptTcpClient();
var stream = client.GetStream();
int b;
while ((b = stream.ReadByte()) != -1) {
var str = $"{(byte)b:x2} ";
Console.Write(str);
stream.Write(Encoding.ASCII.GetBytes(str));
}
例如,如果我telnet到localhost 5050
并写入hello<enter>
,我得到68 65 6c 6c 6f 0d 0a
.
只要我在telnet窗口中按下Ctrl-C,程序就会在其控制台窗口中 echo ff f4 ff fd 06
,但telnet客户端没有收到任何消息.之后,我在telnet客户端中输入的任何其他内容也会在程序的控制台中 echo ,但telnet客户端永远不会接收到.这发生在WSL2 Ubuntu或MSYS2的telnet上.
Native Windows Telnet客户端工作正常(实际上使用Ctrl-C表示为03
的情况下逐个字符发送数据).