我有一个如下所示的程序:
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地址时,它不起作用, 它抛出一个例子"请求的地址在上下文中无效"
新代码: EndPoint bindEndPoint = new IPEndPoint(IPAddress.Parse(" 192.168.40.1"),3838);
答案 0 :(得分:2)
您绑定的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);
这会限制您接受数据的来源。