#c# #windows #sockets #networking
#c# #Windows #сокеты #сеть
Вопрос:
Следующее утверждение
var socket = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Udp);
На моем компьютере появилась следующая ошибка.
An unhandled exception of type 'System.Net.Sockets.SocketException' occurred in System.Net.Sockets.dll
The requested protocol has not been configured into the system, or no implementation for it exists
Однако это сработает, если я изменю значение ProtocolType
на Tcp
?
Я использую Windows 10 с Visual Studio 2019.
Обновление: я изменил код для инициализации сокета. Теперь он получает исключение в строке socket.Bind(endPoint);
.
var host = Dns.GetHostName();
var ip = Dns.GetHostEntry(host).AddressList[0];
var endPoint = new IPEndPoint(ip, port);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
try
{
socket.Bind(endPoint);
socket.Listen(100);
while (true)
{
Console.WriteLine("Waiting...");
mre.Reset();
socket.BeginAccept(new AsyncCallback(AccetCallBack), socket);
mre.WaitOne();
}
Необработанное исключение: System.Net.Sockets.Исключение SocketException: попытка выполнения операции не поддерживается для типа объекта, на который ссылается
Комментарии:
1.Если
AddressFamily == AddressFamily.InterNetwork =>
SocketType.Raw
.ProtocolType.Tcp
поддерживаетSocketType.Stream
.2. Я изменил его на
new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
. Теперь он получает новое исключение «Предпринятая операция не поддерживается для типа объекта, на который ссылается»3. Лол, это была моя ошибка.
ProtocolType.Udp
поддерживает обаSocketType.Dgram
иSocketType.Raw
, но я хотел написать первое. Каков контекст вашего приложения здесь?4. Я пишу сервер сокетов и клиент, используя UDP. Клиент отправит некоторые данные на сервер и вернет их обратно.
5. С протоколом без подключения вы не прослушиваете соединения. Используйте метод ReceiveFrom() для получения любой дейтаграммы. SendTo() для отправки.