这是连接的属性和方法。
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上安装此应用程序时才会发生。
是否存在调整兼容性标志?
谢谢!
答案 0 :(得分:3)
也许在Win7上,您获得了IPv6作为_hostIpAddress。在实例化套接字时尝试使用类似的东西:
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);
}