我正在启动C#程序以通过本地网络共享文件,它应该能够列出使用相同程序的本地网络上的所有用户。
我使用UDP广播宣布用户在网络中的存在,好像有问题。当我运行监听器然后从同一台计算机进行广播时,我确实得到了响应。但是,当我尝试从同一子网上的其他设备发送广播时,我什么都没得到。
这是我的广播发送课程:
public class BroadcastHelper
{
private int portNo;
private Socket brSock;
private IPEndPoint brEp;
public BroadcastHelper(int _portNo = 8888)
{
this.portNo = _portNo;
this.brSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.brSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
this.brEp = new IPEndPoint(IPAddress.Broadcast, portNo);
}
public void SendBroadcast(string message)
{
byte[] buf = Encoding.ASCII.GetBytes(message);
brSock.SendTo(buf, this.brEp);
}
}
这是我的听众代码:
byte[] buf = new byte[1024];
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var iep = new IPEndPoint(IPAddress.Any, 8888);
socket.Bind(iep);
var ep = iep as EndPoint;
socket.ReceiveFrom(buf, ref ep);
string msg = Encoding.ASCII.GetString(buf);
Console.WriteLine("Incoming message: " + msg);
有人可以告诉我问题出在哪里,我是否必须设置一些额外的SocketOptions,或者我应该使用绝对不同的技术来实现这个发现?
C#.NET 4.0