【问题标题】:SocketException occur when open children form打开子窗体时发生 SocketException
【发布时间】:2015-08-27 02:19:04
【问题描述】:

我使用 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) 在 System.Net.Sockets.Socket.Bind(EndPoint localEP) 在 System.Net.Sockets.TcpListener.Start(Int32 backlog) 在 System.Net.Sockets.TcpListener.Start()

我应该如何防止此异常或检查TcpListener 是否已启动?感谢大家的帮助。

【问题讨论】:

    标签: c# winforms sockets


    【解决方案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();
    }
    

    【讨论】:

    • 感谢您的建议,我会注意每个实例只能绑定一个端口。但是 TcpListener 没有Close() 功能,兄弟^^
    • 你也可以试试看这个msdn.microsoft.com/en-us/library/…
    • 感谢您的快速回复。
    【解决方案2】:

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

    尝试使用smoClient = new TcpListener(ipAddress, 0) - 它会选择第一个可用端口。

    【讨论】:

    • 但是我的程序必须与其他程序连接,并且固定的端口是55962
    • 在这种情况下,您应该使用smoClient.Stop() 正确停止侦听器并释放端口。 (顺便说一句,TcpListener 通常是服务器,而不是客户端,因为它侦听连接,不连接到其他点)
    • 在这种情况下,我有一个已存在的程序(客户端)始终连接到服务器,该服务器在端口 55962 上打开侦听,因此我无法更改此端口。感谢您的建议,我会考虑Stop()监听器并释放端口^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多