当我尝试侦听端口时,请求的地址在其上下文中无效

时间:2015-06-17 11:16:44

标签: c# sockets listener port

我正在尝试使用网络连接到传感器,传感器的IP在端口3000上是192.168.2.44;

我的代码:

byte[] byteReadStream = null; // holds the data in byte buffer
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.2.44"), 3000);//listen on all local addresses and 8888 port
TcpListener tcpl = new TcpListener(ipe);
while (true)
{
    //infinite loop
    tcpl.Start(); // block application until data and connection
    TcpClient tcpc = tcpl.AcceptTcpClient();
    byteReadStream = new byte[tcpc.Available]; //allocate space
    tcpc.GetStream().Read(byteReadStream, 0, tcpc.Available);
    Console.WriteLine(Encoding.Default.GetString(byteReadStream) + "\n");
}

enter image description here

但是当我运行此代码时出现此错误:

  

请求的地址在其上下文中无效

3 个答案:

答案 0 :(得分:15)

使用IPAddress.Any收听。这似乎是你的目标:

//listen on all local addresses

您指定的收听地址由于某种原因无效。无需指定数字地址。

答案 1 :(得分:8)

TcpListener在本地计算机上的给定端口上侦听来自TCP网络客户端的连接。也就是说,对于传入连接。您的代码将充当各种“服务器”。

  

请求的地址在其上下文中无效

简单来说,这意味着您机器上的任何网络接口都不会使用给定的IP地址。

使用IPAddress.Any侦听任何IP地址(即网络接口)。

但是,可能需要连接到传感器(在端口3000上),而不是相反。

编辑:新的异常只是告诉您有两个应用程序试图侦听相同的接口/端口组合。你有两个同时运行的实例吗?

答案 2 :(得分:0)

此问题的原因之一可能是配置文件中存在 defaultProxy 部分,该部分将通过此设置中提到的代理地址路由每个传出呼叫。确保在代理地址上侦听代理服务器/服务,或者对本节进行注释以停止路由。如果应用程序配置文件没有此文件,并且此错误仍然存​​在,请检查 machine.config 文件中的 defaultProxy 部分。 machine.config 应该在文件夹 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config 中可用。在我们的例子中,它是 machine.config 中的 defaultProxy