我可以将UDP消息从一台计算机发送到某个端口上的自身,但无法将此消息从一台计算机发送到同一局域网中的另一台计算机。我是C#的新手,也是网络编程的新手,因此该解决方案可能很简单...
我尝试了Microsoft Docs提供的示例,但只做了很小的更改。 (名称等)
两个代码都作为单独的程序运行。
//RECEIVE
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class UDPListener
{
private const int listenPort = 11000;
private static void Listen()
{
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
try
{
while (true)
{
Console.WriteLine("Waiting for broadcast");
byte[] receivebytes = listener.Receive(ref groupEP);
Console.WriteLine(Encoding.ASCII.GetString(receivebytes, 0, receivebytes.Length));
}
}
catch (SocketException e)
{
Console.WriteLine(e);
}
finally
{
listener.Close();
}
}
public static void Main()
{
Listen();
}
}
//SEND
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//192.168.2.5 is the IP Address of the receiving computer
IPAddress broadcast = IPAddress.Parse("192.168.2.5");
byte[] bytestosend = Encoding.ASCII.GetBytes("Hi");
IPEndPoint ep = new IPEndPoint(broadcast, 11000);
socket.SendTo(bytestosend, ep);
Console.WriteLine("bytestosend were send");
}
}
发送程序告诉我消息已发送,但是接收程序没有输出。
编辑1:资源管理器说,在接收方计算机上实际上没有网络活动,而在发送方计算机上实际上是在发送东西。
编辑2:我在另一个网络中尝试了我的应用程序,并且运行良好。我做了一些研究,发现有时路由器不允许通过子网(或类似的东西)进行udp广播。所以我认为这可能是我的路由器。 (很遗憾,我无法访问它的设置。)因此,我认为问题已解决!