gpt4 book ai didi

c# - 带有 StreamWriter 的 NetworkStream 在 Linux 上的行为是否有所不同?

转载 作者:行者123 更新时间:2023-12-03 19:00:36 25 4
gpt4 key购买 nike

以下控制台应用程序在 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 上按预期工作。
Windows
Linux
控制台应用程序的目标是 .net5.0,但也尝试了 .net3.1 并得到了相同的结果。我还尝试在云中使用 Docker 的 Linux VM 上运行它,但也得到了相同的结果。
Linux 上的 StreamWriter/NetworkStream 是否存在差异(与 Windows 相比),更具体地说,为什么我在使用 Google 服务器时没有遇到相同的问题?

最佳答案

我想知道......这像行尾增量一样简单吗? Windows 和 Linux 有不同 Environment.NewLine值。也许尝试添加 \r\n明确地(因为 Windows 似乎可以工作),而不是依赖本地操作系统行尾?

clearTextWriter.Write("HELO domain.com\r\n");
另外:尝试添加显式刷新 - clearTextWriter.Flush(); .
至于为什么谷歌服务器工作:也许它接受的东西更宽容,因为第一台服务器更精确地遵循规范,并且该规范大概说消息由 \r\n终止。 .或者规范可能不明确,而谷歌只是选择了宽容。
顺便说一句:出于类似的原因,明确指定 Encoding 是个好主意。在这里,大概是UTF8。

关于c# - 带有 StreamWriter 的 NetworkStream 在 Linux 上的行为是否有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64920638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com