【问题标题】:UDP C# connectionUDP C# 连接
【发布时间】:2012-04-17 21:16:14
【问题描述】:

我有一个如下所示的程序:

Socket receiveSocket = new Socket(AddressFamily.InterNetwork,
                                  SocketType.Dgram, ProtocolType.Udp);

EndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, 3838);

byte[] recBuffer = new byte[256];

public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    receiveSocket.Bind(bindEndPoint);
    receiveSocket.Receive(recBuffer);
}

它正在工作,但是当我只想收听特定的 IP 地址时它不起作用, 它抛出一个异常“请求的地址在上下文​​中无效”

新代码: 端点 bindEndPoint = new IPEndPoint(IPAddress.Parse("192.168.40.1"), 3838);

【问题讨论】:

  • 您的意思是“收听特定IP上”而不是“收听”吗?因为这就是你的新样本建议你想做的事情..
  • 您确定您的计算机有该 IP 地址吗?另外:Recieve 用于 TCP 而不是 UDP。使用ReceiveFrom

标签: c# udp


【解决方案1】:

您要绑定的 IP 地址应该是实际分配给您计算机上网络接口的 IP 地址之一。

假设您有一个以太网接口和一个无线接口

以太网:192.168.1.40

无线:192.168.1.42

在你的套接字上调用 Bind 方法时,你是在告诉它在哪个接口上 你想听数据。例如,要么是“其中任何一个”,要么只是以太网接口。

我猜这不是你要找的?

也许您正试图限制谁可以连接到您的服务器

所以你可能正在寻找的是

var remoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.40"), 0)
receiveSocket.ReceiveFrom(buffer, remoteEndpoint);

这限制了您接受数据的来源。

【讨论】:

  • IPAddress.Parse("192.168.40.1") 应该是 IPAddress.Parse("192.168.1.40") ?
  • 不错的收获!谢谢@MysticLin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2020-07-03
相关资源
最近更新 更多