假设我使用TcpListener开始侦听任何IP地址和端口,它首次运行。但是在我重新启动程序后不久,我收到了这个错误'通常只允许使用每个套接字地址'。听起来我退出程序时没有关闭tcpListener,我在Form_closing中做了但没有用。后来我找到了一种方法来解决这个问题,每次更改我的端口,虽然这可以解决问题我需要一个修复端口。这是我的代码的样子。
TcpListener tcpListener;
Socket socketClient;
const int PORT_LISTEN_SERVER = 7568;
tcpListener = new TcpListener(IPAddress.Any, PORT_LISTEN_SERVER);
tcpListener.Start(); //Error at this line
socketClient = tcpListener.AcceptSocket();
IPEndPoint ipend = (IPEndPoint)socketClient.RemoteEndPoint;
toolStripLabel1.Text = "Connection from " + IPAddress.Parse(ipend.Address.ToString());
我如何关闭我的侦听器连接
try
{
MessageBox.Show("Try to clean up!");
tcpListener.Stop();
socketClient.Close();
}
catch { MessageBox.Show("Error CleanUp!"); }
更新 假设我改为函数make recursion。要检查tcpListener的stop方法可能会解决这个问题。每次我尝试运行该函数时,我都会收到错误消息。似乎停止方法无法解决这个问题。
private void BeginListen()
{
try
{
tcpListener = new TcpListener(IPAddress.Any, PORT_LISTEN_SERVER);
tcpListener.Start();
MessageBox.Show("tcpListener is started");
}
catch (Exception ex)
{
MessageBox.Show("Error at: " + ex);
tcpListener.Stop();
BeginListen();
}
答案 0 :(得分:0)
好吧,我自己就解决了。 Socket.Close在分配之前执行。 - user3138965