我使用2 Forms
开发了一个应用:Form1
是Form2
的父级。我通过以下代码从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
是否已启动?感谢您的帮助。
答案 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();
}