打开子窗体时发生SocketException

时间:2015-08-27 02:19:04

标签: c# winforms sockets

我使用2 Forms开发了一个应用:Form1Form2的父级。我通过以下代码从Form1重定向到Form2

Form2 settingsForm = new Form2(this);
settingsForm.Show();

Form1中,我开始TcpListener

static IPAddress ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[1];
TcpListener smoClient = new TcpListener(ipAddress ,55962);
try
{
     smoClient.Start();

     MessageBox.Show("Connected");
}
catch (SocketException se) 
{
     Console.WriteLine(se.ToString());
}

但是当我打开Form2时,会抛出SocketException

  

System.Net.Sockets.SocketException(0x80004005):只有一种用法   每个套接字地址(协议/网络地址/端口)通常是   允许在System.Net.Sockets.Socket.DoBind(EndPoint   endPointSnapshot,SocketAddress(socketAddress)at   System.Net.Sockets.Socket.Bind(EndPoint localEP)at   System.Net.Sockets.TcpListener.Start(Int32 backlog)at   System.Net.Sockets.TcpListener.Start()

如何阻止此异常或检查TcpListener是否已启动?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

可能您有Windows认为您的端口55962仍然被很久以前关闭的应用实例使用。

尝试使用smoClient = new TcpListener(ipAddress, 0) - 它将获取第一个可用端口。

答案 1 :(得分:1)

我是客人,你不止一次重新创建你的套接字而忘记妥善处理该对象。请记住,每个实例只能绑定一个端口。

static IPAddress ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[1];
TcpListener smoClient = new TcpListener(ipAddress ,55962);
try
{
     smoClient.Start();

     MessageBox.Show("Connected");
}
catch (SocketException se) 
{
     Console.WriteLine(se.ToString());         
}
finally
{
    smoClient.Stop();
}