使用套接字的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,我认为它不能作为管理员运行。还是说以管理员身份登录?