Отсутствует конструктор сокета
Эта программа:
open System.Net.Sockets
let s = new Socket(SocketType.Stream, ProtocolType.Tcp)
Сбой с этим сообщением об ошибке на моно:
ошибка FS0505: член или конструктор объекта 'Socket' не принимает 2 аргументов. Обнаружена перегрузка с 1 аргументом.
И это сообщение об ошибке на TryF#:
ошибка FS0501: член или объектный конструктор 'Socket' принимает 3 аргумента (ов), но здесь ему дается 2. Необходимая подпись: 'Socket(addressFamily: AddressFamily, socketType: SocketType, protocolType: ProtocolType): unit'.
Документация говорит об обратном.
Что я делаю неправильно?
1 ответ
Этот код прекрасно работает для меня в Visual Studio. В Try F# код работает с версией Silverlight платформы.NET, которая не имеет всех перегрузок, доступных в полной версии.NET, и поэтому перегрузка с двумя аргументами отсутствует.
Это можно увидеть, если перейти к разделу "Информация о версии" на двух страницах MSDN:
- Конструктор сокетов (AddressFamily, SocketType, ProtocolType) упоминает Silverlight
- Socket Constructor (SocketType, ProtocolType) содержит только списки.NET 4.5, 4.5.1 и 4.5.2.
Я полагаю, вы должны быть в состоянии использовать:
let s = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp)
Хотя я подозреваю, что Silverlight может иметь другие ограничения для сокетов по соображениям безопасности, поэтому, если вы хотите работать в сети на F#, возможно, лучше получить версию для ПК.