创建TcpServerChannel时,C#SocketException“没有这样的主机已知”

时间:2014-01-13 11:33:15

标签: c# remoting channel socketexception

我目前正在使用C#remoting开发基于客户端 - 服务器的游戏。在我尝试设置TcpServerChannel之前,一切似乎都运行良好。我正在使用复杂的构造函数(使用IDictionary和stuff),但即使使用普通的TcpServerChannel(int port)构造函数,问题似乎也会出现。

当我尝试创建通道实例时,会抛出一条SocketException,并显示消息“没有这样的主机已知”。堆栈跟踪:

at System.Net.Dns.GetAddrInfo(String name)
at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp()
at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName()
at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider)
at Some.Namespace.Server.Start()

然而,经过一些研究后我发现问题是CoreChannel.GetMachineIp()方法。我找到了CoreChannelhere的代码并注意到,Dns.GetHostEntry(string hostNameOrAddress)方法被调用了两次。在第一次调用中,Dns.GetHostName()方法的返回值(正确返回我的计算机名称,假设我们在这里得到“hostname”)作为参数传递,而在第二次调用中传递返回的IPHostEntry.HostName 。出现问题的地方是:由于我的计算机位于域内(我们称之为“域”),因此返回的IPHostEntry.HostName包含“hostname.domain”而不仅仅是“hostname”。然后第二个Dns.GetHostEntry("hostname.domain")调用抛出异常,因为“hostname.domain”未知。

有一个similar question,但它对我没有任何帮助。

我不知道为什么这个东西会这样工作,但我无法更改我的计算机名称或域名,所以我陷入困境,真的需要一些帮助。

我正在使用Windows 7 64位(如果重要),VS Professional 2012 Update 4和.NET Framework 4.5。

感谢您的帮助

0 个答案:

没有答案