服务器端用的是windows 2003 Server |
|
2分 |
检查代码,看是否多次执行了StartListening
|
10分 |
估计你的ReStartProgram这个流程没有把之前的socket关闭就重新绑定了端口
|
10分 |
那就说明 3024 又一次被使用了。 catch捕获异常后,重新启动之前 没有释放端口。
|
1分 |
ReStartProgram()这个方法看看有没有关闭socket
|
1分 |
退出的时候,监听线程还在,所以没有完全关闭,把监听线程设置为后台线程。程序退出以后。监听线程也退出了。端口就不会被占用。
|
1分 |
检查下是不是下面两种可能:
1、ReStartProgram();的时候,程序进程还在,这就导致出现两个运行的exe 2、代码里面多次调用了StartListening方法 |
既然你这个代码里出现了ReStartProgram();
别的代码里说不定也出现了ReStartProgram(); 所以你应该先测试当程序重启的时候是否就一定会发生这个错误 |
|
15分 |
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(); /pre> 执行2次 就报错.. 所以你自己检查下逻辑吧 |
经测试
在 /// 重新启动本程序 /// </summary> private void ReStartProgram() { //通过停止监听让myListener.AcceptTcpClient()产生异常退出监听线程 myListener.Stop() ; //添加这句代码后就没问题了。 。。。。。。。。。。 } 在重启程序时,先关闭监听线程就好了,谢谢大家 |