#c# #multicast #hamachi
Вопрос:
Я создал сервер, который использует многоадресные сокеты UDP. Я могу запустить сервер в своей сети и связаться с каждым клиентом. Проблема в том, что сейчас я пытался связаться с клиентами, подключенными через hamachi. Я читал, что он поддерживает многоадресную рассылку, однако сообщения, похоже, не принимаются.
Вот как я создаю udpclient:
localIPaddress = IPAddress.Any;
multicastAddress = = IPAddress.Parse("233.0.0.2");
multicastPort = 7778;
// Create endpoints
multicastEndPoint = new IPEndPoint(multicastAddress, multicastPort);
remoteEndPoint = new IPEndPoint(_localIPaddress, multicastPort);
// Create and configure UdpClient
socket = new UdpClient();
// The following three lines allow multiple clients on the same PC
socket.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket.ExclusiveAddressUse = false;
// Bind, Join
socket.Client.Bind(remoteEndPoint);
socket.JoinMulticastGroup(multicastAddress);
// Start listening for incoming data
socket.BeginReceive(new AsyncCallback(ReceiveCallback), null);
Вот как я получаю информацию:
private void ReceiveCallback(IAsyncResult _result)
{
try
{
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, multicastPort);
byte[] data = socket.EndReceive(_result, ref clientEndPoint);
// Restart listening for udp data packages
socket.BeginReceive(new AsyncCallback(ReceiveCallback), null);
if (data.Length < 4)
{
Disconnect();
return;
}
// Handle Data
using (Packet packet = new Packet(data))
{
HandleData(packet);
}
}
catch (Exception ex)
{
if (instance.isConnected)
Debug.Log($"Error receiving UDP Multicast data: {ex}");
}
}
И вот как я отправляю информацию:
public void SendData(Packet _packet)
{
try
{
socket.Send(_packet.ToArray(), _packet.Length(), multicastEndPoint);
}
catch (Exception ex)
{
Debug.Log($"Error multicasting UDP data: {ex}");
}
}
Любая информация была бы признательна, так как не так много информации о том, как это решить.
Комментарии:
1.
socket.JoinMulticastGroup(
только с int в качестве аргумента?2. о, извините, это опечатка в посте. В коде я использую адрес многоадресной рассылки. Спасибо, что заметили, я немедленно исправлюсь.