У меня есть лабораторная среда в VMware с WS2008R2-сервером и W7-клиентом.Я пытаюсь передать WCF-сервис-адрес с сервера и получить его на клиенте.Я использую System.Net.Sockets в C # .NET, и я могу успешно отправлять данные с сервера.Я выгляжу нормально с WinDump по крайней мере.Но когда я пытаюсь получить это на клиенте, это терпит неудачу.Я не могу понять, где проблема ..?Клиент может общаться с сервером другими способами и с моим WCF-сервисом, если я вручную введу его адрес.Я включил свои брандмауэры в лабораторной среде на всякий случай.
[Update]
Я проверил WinDump на моем client-vm, и то же самое udp-сообщение появляется здесь такжекажется, что он сможет принимать трансляцию.Но почему метод ReceieveFrom ничего не возвращает?Я неправильно настроил клиентский сокет?Должен ли он связываться с Any-адресом или локальным IP-адресом?Ни то, ни другое не работает ...
[/ Update]
Вот код сервера:
public static class MulticastServer
{
static Socket socket;
static IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, 9050);
public static void Open()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
}
public static void Send(string message)
{
socket.SendTo(Encoding.ASCII.GetBytes(message), ep);
}
public static void Close()
{
socket.Close();
}
}
И клиент:
public static class MulticastClient
{
public static string ReceiveOne()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 9050);
socket.Bind(ep);
byte[] data = new byte[1024];
EndPoint e = (EndPoint)ep;
int i = socket.ReceiveFrom(data, ref e);
socket.Close();
return Encoding.ASCII.GetString(data, 0, i);
}
}