【问题标题】:c# socket connect addressfamily时间:2019-04-10 标签:c#socketconnectaddressfamily
【发布时间】:2016-04-19 19:51:08
【问题描述】:

我有一个连接到我的 ftp 的功能

   clientSocket = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp);
   clientSocket.Connect(new IPEndPoint(Dns.Resolve(remoteAddress).AddressList[0], remotePort));

但是,对于某些计算机,这是行不通的。 例外是

系统在尝试使用调用的指针参数时检测到无效的指针地址。

如果我将 AddressFamily.Unspecified 更改为 AddressFamily.InterNetwork,问题就解决了。 我必须理解为什么会出现这个问题,为什么原始代码适用于某些计算机但不适用于所有人...... 如果有人可以帮助我:)

【问题讨论】:

标签: c# sockets ftp


【解决方案1】:

当使用AddressFamily.Unspecified 时,您可能使用的第一个地址可以是 IPv6 而不是 IPv4。从这个MSDN website可以看出,使用AddressFamily.InterNetwork使用的是IPv4地址。

获取所有地址然后使用第一个 IPv4 地址可能更安全。这个答案将告诉你如何:Get IPv4 addresses from Dns.GetHostEntry()

【讨论】:

  • 感谢您的回答。我试过 IPHostEntry hostInfo = Dns.GetHostByName(remoteAddress); for (int index = 0; index
  • 你在触发异常的电脑上试过了吗?
  • 是的,我有它在我的电脑上(之前的开发者没有,在另一台电脑上)
猜你喜欢
  • 2022-01-16
  • 2018-07-04
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2015-02-10
  • 2013-06-03
  • 2018-09-10
相关资源
最近更新 更多