NetworkStream 和 StreamWriter 在 Linux 上的行为是否不同?

Does NetworkStream with StreamWriter behave differently on Linux?

以下控制台应用程序在 Windows 上工作正常,但是当我 运行 它在 WSL 中或作为 Linux Docker 容器时,我从服务器收到超时。

using System;
using System.IO;
using System.Net.Sockets;

namespace ClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            const string server = "inbound-smtp.us-west-2.amazonaws.com";
            const int port = 25;
            Console.WriteLine($"Connecting to: {server}");
            using (var client = new TcpClient(server, port))
            {
                using (NetworkStream stream = client.GetStream())
                using (StreamReader clearTextReader = new StreamReader(stream))
                using (StreamWriter clearTextWriter = new StreamWriter(stream) { AutoFlush = true })
                {
                    // read connection response
                    var connectResponse = clearTextReader.ReadLine();
                    Console.WriteLine(connectResponse);

                    // send command
                    Console.WriteLine($"HELO domain.com");
                    clearTextWriter.WriteLine("HELO domain.com");

                    // read command response
                    var commandResponse = clearTextReader.ReadLine();
                    Console.WriteLine(commandResponse);

                }
            }
        }
    }
}

在 Windows 上输出 250 次成功...

Linux 上的输出,451 超时...

但是,如果我将服务器地址更改为 ASPMX.L.GOOGLE.com,那么该应用程序将按预期在 Windows 和 Linux.

上运行

控制台应用程序以 .net5.0 为目标,但也尝试使用 .net3.1 并获得相同的结果。我也尝试过 运行 在 Linux 虚拟机上 Docker 在云中使用它,但也得到了相同的结果。

与 Linux 上的 StreamWriter/NetworkStream 是否存在差异(与 Windows 相比),更具体地说,为什么我在使用 Google 服务器时没有遇到同样的问题?

我想知道...这就像行尾增量一样简单吗? Windows 和 Linux 具有不同的 Environment.NewLine 值。也许尝试显式添加 \r\n(因为 Windows 似乎有效),而不是依赖本地 OS 行尾?

clearTextWriter.Write("HELO domain.com\r\n");

此外:尝试添加显式刷新 - clearTextWriter.Flush();.

至于为什么 Google 服务器工作:也许它接受的内容更宽容,因为第一个服务器更精确地遵循规范,并且该规范大概说消息被终止\r\n。或者规范有歧义,Google就选择了宽容。

顺便说一句:出于类似的原因,最好在此处明确指定 Encoding,大概是 UTF8。