Вы компилируете свой код в 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
Метод Socket.Bind (EndPoint localEP)
- ваш друг. Подробности смотрите здесь в MSDN.
Чтобы узнать обо всех локальных адаптерах и их типах, просмотрите System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces ()
Не могли бы вы попробовать использовать функцию bind ()? Возможно, это поможет.
На msdn я обнаружил, что:
( http://msdn.microsoft.com/en-us/library/ms737550 (VS.85) .aspx )
Примечания
Функция привязки требуется на неподключенная розетка перед последующим вызывает функцию прослушивания. это обычно используется для привязки к ориентированный на соединение (поток) или сокеты без установления соединения (датаграммы). В функция привязки также может использоваться для привязки к сырому сокету (сокет был создается путем вызова функции сокета с параметром типа, установленным на SOCK_RAW). Функция привязки также может использоваться на неподключенной розетке перед последующими звонками в подключить , ConnectEx, WSAConnect, WSAConnectByList или WSAConnectByName функции перед операциями отправки.
Когда сокет создается с помощью вызова к функции сокета, он существует в пространство имен (семейство адресов), но у него ему не присвоено имя. Используйте привязку функция по установлению местных ассоциация сокета путем присвоения локальное имя безымянного сокета.
Имя состоит из трех частей, когда с использованием семейства Интернет-адресов: адрес семьи. Адрес хоста. Порт номер, который идентифицирует приложение.
Для справки: у меня возникла проблема с использованием 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);
}
}