通常只允许使用每个套接字地址一次

时间:2013-12-30 00:04:16

标签: c# sockets tcplistener

假设我使用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();
}

Only one usage of each socket address is normally permitted

1 个答案:

答案 0 :(得分:0)

好吧,我自己就解决了。 Socket.Close在分配之前执行。 - user3138965

相关问题