通常只允许使用每个套接字地址(协议/网络地址/端口)
我正在连接到Asp.Net中的TCP/IP端口,基本上我在这个端口上连接了一个设备,工作正常,但第二次当tcp侦听器尝试启动时,它会产生上述错误。我怎样才能摆脱 任何机构可以指导我这个错误的,这里是我的代码,我使用连接到TCP/IP端口:通常只允许使用每个套接字地址(协议/网络地址/端口)
try
{
byte[] ipaddress = new byte[4];
string ip = ConfigurationManager.AppSettings["IP"].ToString();
string[] ips = ip.Split('.');
ipaddress[0] = (byte)Convert.ToInt32(ips[0]);
ipaddress[1] = (byte)Convert.ToInt32(ips[1]);
ipaddress[2] = (byte)Convert.ToInt32(ips[2]);
ipaddress[3] = (byte)Convert.ToInt32(ips[3]);
int portNumber = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]);
tcpListener = new TcpListener(new IPAddress(ipaddress), portNumber);
tcpListener.Start();
tcpClient = new TcpClient();
tcpClient.NoDelay = true;
try
{
System.Threading.Thread.Sleep(60000);
tcpClient.ReceiveTimeout = 10;
tcpClient = tcpListener.AcceptTcpClient();
}
catch (Exception ex)
{
tcpClient.Close();
tcpListener.Stop();
}
NetworkStream networkStream = tcpClient.GetStream();
byte[] bytes = new byte[tcpClient.ReceiveBufferSize];
try
{
networkStream.ReadTimeout = 2000;
networkStream.Read(bytes, 0, bytes.Length);
}
catch (Exception ex)
{
tcpClient.Close();
tcpListener.Stop();
}
string returndata = Encoding.Default.GetString(bytes);
tcpClient.Close();
tcpListener.Stop();
return returndata.Substring(returndata.IndexOf("0000000036"), 170);
}
catch (Exception ex)
{
if (tcpClient != null)
tcpClient.Close();
tcpListener.Stop();
LogError("Global.cs", "ReceiveData", ex);
ReceiveData();
}
当谈到在这条线tcpListener.Start
();对于第二时间则生成错误 “只有每个套接字地址(协议/网络地址/端口)中的一个的使用通常被许可”
你不使用关键字或最后块利用的确保您的资源已关闭。
如果代码中存在任何异常,则清理可能不会发生。你的多个catch块可能得到所有场景,但是我不能通过阅读代码来轻易判断。
的使用需要清理的资源通常优选的模式是:
using (MyResource res = new MyResource())
{
// Do Stuff
}
如果MyResource实现IDisposable,或
try
{
MyResource res = new MyResource();
// Do Stuff
} catch (Exception ex)
{
// Whatever needs handing on exception
}
finally
{
res.Close(); // Or whatever call needs to be made to clean up your resource.
}
我面临同样的问题,我已经检查了所有使用连接的代码块,并且所有代码块都有结束连接的Finish块。 这个异常阻止了我调试我的WebApplication。有谁知道如何摆脱这个问题? – MMalke 2012-09-21 14:27:50
@MMalke:你有多个线程访问连接吗?此外,您可以将连接包装在另一个实现了IDisposable的对象中,并记录资源的打开和关闭,以便您可以看到打开但未关闭的位置。 – 2012-09-23 08:05:10
如果这是一个循环或东西,注意如果你的代码没有触发任何异常,那么连接就没有关闭。只有在例外情况下才会关闭,这可能会在结尾处被捕获catch
块
乍一看,我会建议听者没有正确关闭。 – Russell 2010-02-10 23:04:50