没有这样的主机已知套接字连接

问题描述 投票:0回答:6

我正在尝试使用此库进行 telnet 连接。我已正确调用该函数,它执行下面的代码,但失败并给出以下错误:

System.Net.Sockets.SocketException was unhandled
  HResult=-2147467259
  Message=No such host is known
  Source=System
  ErrorCode=11001
  NativeErrorCode=11001
  StackTrace:
       at System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port)
       at MinimalisticTelnet.TelnetConnection..ctor(String Hostname, Int32 Port) in c:\users\kylec\documents\visual studio 2010\Projects\Mail Server Capture\Mail Server Capture\TelnetInterface.cs:line 36
       at Mail_Server_Capture.Form1.btn_MailGet_Click(Object sender, EventArgs e) in c:\users\kylec\documents\visual studio 2010\Projects\Mail Server Capture\Mail Server Capture\Form1.cs:line 55
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at Mail_Server_Capture.Program.Main() in c:\users\kylec\documents\visual studio 2010\Projects\Mail Server Capture\Mail Server Capture\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

代码:

public TelnetConnection(string Hostname, int Port)
        {
            tcpSocket = new TcpClient(Hostname, Port);

        }

我在这里搜索过这个问题,看起来很常见。有些人说主机确实无法访问(事实并非如此),这是一个 Microsoft .NET 问题,或者只是一个可以忽略的异常。如果它是可以忽略的东西,我似乎无法让程序通过它。我似乎也找不到任何解决方案来修复它。我对这个很迷茫,任何帮助将不胜感激。

c# sockets exception telnet
6个回答
17
投票

相关但罕见/边缘案例:我在 C# .NET 4.7.2 Web 应用程序(调用 http 端点)中遇到了同样的错误,因为我所在的计算机(Parallels Win10 VM)已悄然失去了网络连接(没有互联网)由于一些 Parallels 错误。一旦我禁用并重新启用网络适配器,错误就消失了。 /翻白眼


8
投票

解决方案非常简单,但却被忽视了。首先我注意到 tcpclient 更喜欢 IP 地址而不是名称。然后我还意识到有时域名两边会有多余的空格。所以我使用下面的代码来剥离字符并将其更改为ip。

string.Trim();
//Telnet Start
IPHostEntry hostInfo = Dns.Resolve(hostnamehere);

4
投票

我将把这个答案放在这里,供那些像我一样遇到此错误但似乎从未找到答案的人使用:

如果您尝试使用以下命令从公司网络内的 DNS 服务器获取客户端主机名:Dns.GetHostEntry(ClientIP),并且每次您不断收到“没有已知的此类主机套接字连接错误”时,您的 DNS 服务器可能不会为您在代码中传递的 IP 范围设置反向查找区域。

例如,我有一个与我们的 Web 应用程序配合使用的程序,该程序捕获提交帮助请求的员工的计算机名称和 IP 地址。如果使用该应用程序的计算机位于反向查找区域的 VLAN 上,则该方法有效。

如果您有权访问域的 DNS 服务器,请为域中使用的所有 IP 地址添加反向查找区域,或者让网络管理员执行此操作。

始终尝试捕获它,以防万一有人从网络外部访问您的网络应用程序。

知道这一点会让我省去几个小时的挫败感。


2
投票

#在 asp.net web api 中没有这样的主机

在 appsetting.json 文件中检查连接字符串(如果未包含主机名),添加主机名,例如:

"ConnectionStrings": {
    "AppCon" : "Server=yourDbServer;Database=YourDbName;Host:localhost;Port=5050;User Id=postgres;Password=1234"
}

这解决了我的问题。也查看其他论坛


0
投票
"ConnectionStrings": {
    "AppCon" : "Server=yourDbServer;Database=YourDbName;Host:localhost;Port=5050;
User Id=postgres;Password=1234"
}

0
投票

如果您使用主机名进行连接,请尝试切换到 IP 并查看是否有效。 这为我解决了这个错误。

这是我之前的连接字符串:

      "ConnectionStrings": {
"DefaultConnection": "Host=rpi5-8gb-green.local;Port=9999;Username=myuser;Password=mypass;Database=postgres;"}

这是更新后的可用版本:

  "ConnectionStrings": {
"DefaultConnection": "Host=192.168.1.120;Port=9999;Username=myuser;Password=mypass;Database=postgres;"}

既然我使用 avahi-daemon 是为了方便,为什么不在代码中直接使用主机名呢?对我来说,使用ip就是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.