【发布时间】:2019-05-17 09:30:32
【问题描述】:
我想绑定一个 NIC 以侦听来自特定 IP 地址的特定端口。我在我的代码中设置了一个内部发送/接收过程进行测试。我已经设法允许可配置的端口值进行侦听,并进行检查以确保它仅从某个 IP 接收。我的问题是,当我将端点设置为 NIC 值时,我只能接收发送到该 IP 的消息。也许我对 UDP 的理解不足,但似乎对我的期望是,我绑定了一个 NIC,将其选择为我应该接收数据包的设备,但它应该能够接收正在发送的数据包让我们说一个广播IP。也许这从根本上是错误的,但这是我的代码。
如果无法做到,并且必须指定网卡的IP从发送方发送,请解释一下,否则有人可以告诉我如何绑定我的网卡但仍然希望接收其他发送的数据包IP。
这是我的接收器
public void StartListening()
{
if (init == true)
{
running = true;
listenEndpoint = new IPEndPoint(Variables.NICIP, Variables.ListenPort);
udp = new UdpClient(listenEndpoint);
init = false;
}
if (running == true)
{
this.udp.BeginReceive(Receive, new object());
}
}
private void Receive(IAsyncResult ar)
{
IPEndPoint ip1 = null;
byte[] bytes1 = null;
if (running == true)
{
bytes1 = udp.EndReceive(ar, ref ip1);
if (ip1.Address.Address == Variables.IPValue.Address)
{
string message = Encoding.ASCII.GetString(bytes1);
Submit = message;
Console.WriteLine(message);
}
}
StartListening();
}
public void Destructor()
{
running = false;
udp.Close();
}
这是我的临时发件人
private void button1_Click(object sender, EventArgs e)
{
Sender hereItComes = new Sender();
hereItComes.Send();
}
public class Sender
{
public void Send()
{
UdpClient client = new UdpClient();
IPEndPoint ip = new IPEndPoint(Variables.NICIP, Variables.ListenPort);
byte[] bytes = Encoding.ASCII.GetBytes("Foo");
client.Send(bytes, bytes.Length, ip);
client.Close();
}
}
}
理想情况下,我想将任何有效的 IP 值放入 Variables.NICIP --> 这是我指定的 NIC 的 IP,该 NIC 将接收数据包。任何帮助将不胜感激。
【问题讨论】:
标签: c# forms asynchronous udp nic