Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我尝试侦听端口时,请求的地址在其上下文中无效_C#_Sockets_Listener_Port - Fatal编程技术网

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

C# 当我尝试侦听端口时,请求的地址在其上下文中无效,c#,sockets,listener,port,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

我正在尝试使用网络连接传感器,传感器的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");
}

但当我运行此代码时,会出现以下错误:

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


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

//listen on all local addresses

由于某些原因,您指定的侦听地址无效。无需指定数字地址。

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

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

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


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

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


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

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

可用的
在99%的情况下是错误的。它通常返回0。使用固定的缓冲区大小。将异常发布到字符串。@usr您能详细告诉我您的请求吗?错误更改为:每个套接字地址(协议/网络地址/端口)通常只允许使用一次。更改为:IPEndPoint ipe=新IPEndPoint(IPAddress.Any,3000);新的错误消息告诉您什么?你对这条消息的解释是什么?@usr你能解释一下为什么会这样吗?而实际的设备IP并不存在t@Decoder94仅在同一IP上。这是因为TCP连接由(IP1、端口1、IP2、端口2)标识。此集合中不能有重复项。不同的“PC”可以重叠端口使用。没有任何机制可以跨机器同步相应操作系统认为已打开或已关闭的内容。打开端口不是网络级别的概念。这是一个操作系统概念。您可以编写一个没有开放端口概念的操作系统。错误已更改:每个套接字地址(协议/网络地址/端口)通常只允许使用一次