当我尝试侦听端口时,请求的地址在其上下文中无效
Posted
技术标签:
【中文标题】当我尝试侦听端口时,请求的地址在其上下文中无效【英文标题】:The requested address is not valid in its context when I try to listen a port 【发布时间】:2015-09-02 14:14:25 【问题描述】:我正在尝试使用网络连接到传感器,传感器的 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");
但是当我运行这段代码时,我得到了这个错误:
请求的地址在其上下文中无效
【问题讨论】:
Available
在 99% 的情况下都是错误的。它通常返回 0。使用固定的缓冲区大小。
发布异常 ToString。
@usr 你能详细告诉我你的要求吗?
【参考方案1】:
使用IPAddress.Any
收听。这似乎是你的目标:
//listen on all local addresses
由于某种原因,您指定的监听地址无效。无需指定数字地址。
【讨论】:
错误改成这样:每个socket地址(协议/网络地址/端口)通常只允许使用一次 我改成这样:IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 3000); 新的错误信息告诉你什么?你对那条信息的解释是什么? @usr 你能解释一下为什么会这样吗?并且实际设备IP没有 @Decoder94 仅在同一 IP 上。这是因为 TCP 连接由 (IP1, Port1, IP2, Port2) 标识。此集合中不能有重复项。不同的“PC”可以重叠端口使用。没有任何机制可以跨机器同步各个操作系统认为打开或关闭的内容。打开端口不是网络级别的概念。这是一个操作系统概念。你可以编写一个没有开放端口概念的操作系统。【参考方案2】:TcpListener
监听来自 TCP 网络客户端的连接,在给定端口上在您的本地机器上。也就是说,对于 incoming 连接。您的代码将充当某种“服务器”。
请求的地址在其上下文中无效
简单地说,这意味着您机器上的任何网络接口都没有使用给定的 IP 地址。
使用 IPAddress.Any
监听任何 IP 地址(即网络接口)。
但是,您可能需要连接到传感器(在端口 3000 上),而不是相反。
编辑: 新的例外只是告诉您有两个应用程序试图侦听相同的接口/端口组合。您是否有两个实例同时运行?
【讨论】:
改错:每个socket地址(协议/网络地址/端口)通常只允许使用一次【参考方案3】:此问题的一个原因可能是配置文件中存在 defaultProxy 部分,该部分将通过此设置中提到的代理地址路由每个传出呼叫。确保在代理地址有代理服务器/服务正在侦听,或评论此部分以停止路由。如果应用程序配置文件没有它,并且此错误仍然存在,请检查 machine.config 文件中的 defaultProxy 部分。 machine.config 应该在文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 中可用。在我们的例子中,它是 machine.config 中的 defaultProxy。
【讨论】:
以上是关于当我尝试侦听端口时,请求的地址在其上下文中无效的主要内容,如果未能解决你的问题,请参考以下文章
连接前的 WinSock 绑定导致 WSAEADDRNOTAVAIL - 请求的地址在其上下文中无效
在蓝牙环境中的Windows上的Python 3.5。请求的地址在其上下文中无效
Boost UDP 多播接收器:set_option:请求的地址在其上下文中无效