使用套接字的Winforms C#应用程序在winXp下工作,但在Windows 7下抛出错误

使用套接字的Winforms C#应用程序在winXp下工作,但在Windows 7下抛出错误,c#,winforms,sockets,windows-7,C#,Winforms,Sockets,Windows 7,下面是连接的属性和方法 protected Socket _socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); private string _host = ""; private string _hostIpAddress = ""; private int _port = 0; public void Connect()

下面是连接的属性和方法

protected Socket _socketConnection =
            new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
private string _host = "";
private string _hostIpAddress = "";
private int _port = 0;

  public void Connect()
        {
            // don't allow two connections
            if (_socketConnection.Connected)
                return;


            // get the ip address from the hostname
            IPHostEntry ipHostEntry = Dns.GetHostByName(_host);
            _hostIpAddress = ipHostEntry.AddressList[0].ToString();

            // create the socket endpoint
            IPAddress ipAddress = IPAddress.Parse(_hostIpAddress);
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, _port);

            // connect
            try
            {
                _socketConnection.Connect(ipEndPoint);
                if (OnConnect != null)
                    OnConnect();
            }
            catch
            {
                throw;
            }
        }
在Windows 7下运行应用程序时,出现以下错误:

getsockopt或setsockopt调用中指定了未知、无效或不受支持的选项或级别

我看到过一些关于在套接字上设置特定选项的消息,但这是一个已经运行多年的应用程序,只有在Windows 7上安装该应用程序时才会出现

是否有可调整的兼容性标志或其他内容


谢谢

也许在Win7上,您可以使用IPv6作为主机地址。在实例化套接字时,请尝试使用以下方法:

if(Socket.OSSupportsIPv6 && _hostIpAddress.AddressFamily == AddressFamily.InterNetworkV6) 
{
   // newer OS
   _socketConnection = new Socket(
       AddressFamily.InterNetworkV6, 
       SocketType.Stream, 
       ProtocolType.Tcp);
   _socketConnection.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
} else { 
   // older OS
   _socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}

您可以尝试在Win7上以管理员身份运行,看看是否存在权限问题。然而,你能发布给你带来问题的整个套接字代码吗?嗨,帕特里克,不幸的是,这个应用程序是click once,我认为它不能作为管理员运行。还是说以管理员身份登录?