这个错误怎么改? socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次

greyrainbow2010 2015-01-08 07:59:05
服务器端用的是windows 2003 Server

private void StartListening()
{
try
{
//指定的IP地址和端口上是否有传入的连接尝试
myListener = new TcpListener(IPAddress.Parse(m_serverIP), int.Parse(m_serverPort));
//监听启动
myListener.Start();
//添加说明信息到ListView
AddListView(string.Format("\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").ToString()
+ " 开始在{0}:{1}监听客户端连接", m_serverIP, m_serverPort));

//监听客户端连接的线程
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
}
catch (Exception ex)
{
intListenFlag = 0;
Utility.WriteToTxt("ServerErrorLog.txt", DateTime.Now.ToString() + ":StartListening " + ex.Message);
//重新启动本程序
ReStartProgram();
}
}


程序运行几天后就报错
“socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次”
端口我是指定的3024, 让客户端去连接服务器端的3024端口,但是运行几天就会报错。
啥原因啊??

...全文
4007 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 版主 2015-01-08
  • 打赏
  • 举报
回复

myListener = new TcpListener(IPAddress.Parse(m_serverIP), int.Parse(m_serverPort));  
myListener.Start();
myListener = new TcpListener(IPAddress.Parse(m_serverIP), int.Parse(m_serverPort));  
myListener.Start();
执行2次 就报错.. 所以你自己检查下逻辑吧
於黾 2015-01-08
  • 打赏
  • 举报
回复
既然你这个代码里出现了ReStartProgram(); 别的代码里说不定也出现了ReStartProgram(); 所以你应该先测试当程序重启的时候是否就一定会发生这个错误
江南小鱼 2015-01-08
  • 打赏
  • 举报
回复
检查下是不是下面两种可能: 1、ReStartProgram();的时候,程序进程还在,这就导致出现两个运行的exe 2、代码里面多次调用了StartListening方法
auos 2015-01-08
  • 打赏
  • 举报
回复
退出的时候,监听线程还在,所以没有完全关闭,把监听线程设置为后台线程。程序退出以后。监听线程也退出了。端口就不会被占用。
shenaild 2015-01-08
  • 打赏
  • 举报
回复
ReStartProgram()这个方法看看有没有关闭socket
exception92 2015-01-08
  • 打赏
  • 举报
回复
那就说明 3024 又一次被使用了。 catch捕获异常后,重新启动之前 没有释放端口。
孤独de猫 2015-01-08
  • 打赏
  • 举报
回复
程序为什么会重启?
  • 打赏
  • 举报
回复
估计你的ReStartProgram这个流程没有把之前的socket关闭就重新绑定了端口
於黾 2015-01-08
  • 打赏
  • 举报
回复
检查代码,看是否多次执行了StartListening
greyrainbow2010 2015-01-08
  • 打赏
  • 举报
回复
经测试 在

        /// 重新启动本程序
        /// </summary>
        private void ReStartProgram()
        {
            //通过停止监听让myListener.AcceptTcpClient()产生异常退出监听线程
            myListener.Stop() ;  //添加这句代码后就没问题了。
        
            。。。。。。。。。。
        }
/// <summary> 在重启程序时,先关闭监听线程就好了,谢谢大家

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧