Я работаю над широковещательным маяком на С#, который должен передавать информацию о сервере всем прослушивающим устройствам. Отправляемая информация будет содержать такую информацию, как URL-адрес службы WCF, пространство имен, список необходимых аргументов и т. д. Сейчас у меня есть отправитель и получатель, которые могут прекрасно общаться, когда они находятся на одном компьютере. Однако, как только я помещаю отправителя на другой компьютер, а не на компьютер получателя, отправитель отправляет свое сообщение, но мой получатель никогда его не получает. Никаких исключений не возникает, и брандмауэр отключен на обеих машинах.
http://codeidol.com/csharp/csharp-network/IP-Multicasting/What-Is-Broadcasting/ — вот откуда я взял свой код.
Отправитель:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPTest
{
class Program
{
static void Main(string[] args)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test message");
sock.SendTo(data, iep);
sock.Close();
}
}
}
Получатель:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPBroadcastReciever
{
class Program
{
static void Main(string[] args)
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to recieve");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("Received: {0} from: {1}", stringData, ep.ToString());
sock.Close();
Console.ReadLine();
}
}
}
Кто-нибудь знает что-нибудь, что я упустил, что позволило бы этим двоим разговаривать на двух разных компьютерах? Они находятся в одной подсети (192.168.1.x)
Спасибо, Ник Лонг.
IPAddress.Broadcast
) в своем коде, а код на этой странице вещает на 192.168.1.255. - person spencercw   schedule 24.02.2012