Установка локальной конечной точки сокета

Вы компилируете свой код в IL, который выполняется и скомпилировал в машинный код во время времени выполнения, это - то, что назвало JIT.

Редактирование , для изложения в деталях ответа еще немного (все еще чрезмерно упрощенный):

при компиляции кода C# в Visual Studio, в это превращаются IL, который понимает CLR, IL является тем же для всех языков, работающих сверху CLR (который является тем, что позволяет времени выполнения.NET использовать несколько языков и inter-op между ними легко).

Во время времени выполнения IL интерпретируется в машинный код (который характерен для архитектуры, Вы идете), и затем это выполняется. Этот процесс называют Как раз вовремя компиляцией или JIT, если коротко. Только IL, который необходим, преобразовывается в машинный код (и только однажды, он "кэшируется", как только он компилируется в машинный код), как раз вовремя , прежде чем он будет выполнен, отсюда имя JIT.

Это - то, на что это было бы похоже для Кода C#

C# > Компилятор C# > Время выполнения.NET IL > > JIT-компилятор > Выполнение Машинного кода >

, И это - то, на что это было бы похоже для Кода VB

VB > Компилятор VB > Время выполнения.NET IL > > JIT-компилятор > Выполнение Машинного кода >

И поскольку Вы видите, что только эти два первых шага уникальны для каждого языка и всего после того, как в это превратились, IL является тем же, которое является, как я сказал прежде, причина, можно выполнить несколько различных языков сверху.NET

7
задан Kazar 2 October 2009 в 10:38
поделиться

3 ответа

Метод Socket.Bind (EndPoint localEP) - ваш друг. Подробности смотрите здесь в MSDN.

Чтобы узнать обо всех локальных адаптерах и их типах, просмотрите System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces ()

14
ответ дан 6 December 2019 в 09:20
поделиться

Не могли бы вы попробовать использовать функцию bind ()? Возможно, это поможет.

На msdn я обнаружил, что:

( http://msdn.microsoft.com/en-us/library/ms737550 (VS.85) .aspx )

Примечания

Функция привязки требуется на неподключенная розетка перед последующим вызывает функцию прослушивания. это обычно используется для привязки к ориентированный на соединение (поток) или сокеты без установления соединения (датаграммы). В функция привязки также может использоваться для привязки к сырому сокету (сокет был создается путем вызова функции сокета с параметром типа, установленным на SOCK_RAW). Функция привязки также может использоваться на неподключенной розетке перед последующими звонками в подключить , ConnectEx, WSAConnect, WSAConnectByList или WSAConnectByName функции перед операциями отправки.

Когда сокет создается с помощью вызова к функции сокета, он существует в пространство имен (семейство адресов), но у него ему не присвоено имя. Используйте привязку функция по установлению местных ассоциация сокета путем присвоения локальное имя безымянного сокета.

Имя состоит из трех частей, когда с использованием семейства Интернет-адресов: адрес семьи. Адрес хоста. Порт номер, который идентифицирует приложение.

0
ответ дан 6 December 2019 в 09:20
поделиться

Для справки: у меня возникла проблема с использованием Bind, потому что я использовал класс UdpClient и получал доступ к его внутреннему сокету (через UdpClient.Client), который будет вызывать SocketException независимо от того, как я пытался выполнить привязку. Мой обходной путь основан на создании и привязке Socket, а затем назначении его экземпляру UdpClient:

using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
    var endPoint = new IPEndPoint(ip, port);
    socket.Bind(endPoint);
    using (var client = new UdpClient() {Client = socket})
    {
        var destinationIP = IPAddress.Broadcast;
        client.Connect(destinationIP, port);
        client.Send(bytes, bytes.Length);
    }
}
6
ответ дан 6 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: