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

Posted

技术标签:

【中文标题】没有这样的主机是已知的套接字连接【英文标题】:No such host is known socket connection 【发布时间】:2014-07-20 15:06:58 【问题描述】:

我正在尝试使用此库进行 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 的问题,或者只是一个可以忽略的异常。如果它是可以忽略的东西,我似乎无法让程序通过它。我似乎也找不到任何解决方案来解决它。我对这个很迷茫,任何帮助将不胜感激。

【问题讨论】:

你给的hostname的前缀是什么? 它是否适用于主机名的 IP 地址插入? 前缀?我通过了类似 e32.co.us.ibm.com @keiv.fly,我无法测试,因为我的代码从域名解析这些 mx 地址。 使用控制台命令:“ping e32.co.us.ibm.com”。它会告诉你IP 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

请注意,您需要深入IPHostEntry才能获得实际IP:hostInfo.AddressList[0].ToString() Dns.Resolve() 现已过时!更好的选择是使用Dns.GetHostEntry()【参考方案3】:

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

如果您尝试使用 Dns.GetHostEntry(ClientIP) 从公司网络中的 DNS 服务器获取客户端主机名,并且每次您不断收到“No such host is known socket connection error”,您的 DNS 服务器可能没有为您在代码中传递的 IP 范围设置反向查找区域。

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

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

总是尝试一下,以防万一有人从您的网络外部访问您的 web 应用程序。

知道这一点会为我节省数小时的挫败感。

【讨论】:

以上是关于没有这样的主机是已知的套接字连接的主要内容,如果未能解决你的问题,请参考以下文章

c# 做视频监控软件。如何用套接字连接一个已知IP地址的摄像头呢?具体点。

在Windows 7里,哪些字属于套接字?

套接字异常:没有到主机的路由

ZMQ 套接字连接超时

如何让套接字仅接受来自本地主机的连接(在 Java 中)?

远程协助开发总结