日期:2014-05-20  浏览次数:20783 次

C#简单问题。
做一个点对点消息传送的程序,在接收的时候总是弹出 "每个套接字地址(协议/网络地址/端口)只允许使用一次 "的异常。有人知道为什么吗?先谢谢了。

------解决方案--------------------
private TcpListener tcpl = new TcpListener(ipaddress, port);
tcpl.Start();

应该是这句重复执行了;
解决办法:
在每次数据发送完成后:
if(tcpl!=null)
{
tcpl.Stop();
tcpl = null;
}

------解决方案--------------------
端口被占了
比如你绑了个80 第二次又绑80就不行了
------解决方案--------------------
你看一下,可能前面运行的程序没有彻底关闭,仍旧占用的端口,还在监听。
在windows任务管理器里面看看进程,断开就好
------解决方案--------------------
没看代码
应该是
private TcpListener tcpl = new TcpListener(ipaddress, port);
这句只调用一次就可以了,不能多次绑定的。
------解决方案--------------------
是不是
AcceptMessage()被多次调用了

private TcpListener tcpl = new TcpListener(ipaddress, port);
放到外边尝试一下
------解决方案--------------------
我想是因为135端口是为其它服务开放的,所以说,你就不能再在它上面监听了,可以换个端口,尽力去避免那些常用的端口。如1024之后的。应该是可行的,楼主可以试试。
------解决方案--------------------
这个问题我遇到过,原因就是在退出程序时没有关闭Socket并释放其占用的资源,这样在下一次启动程序时又要运行
// 新建客户端套接字
tcpclnt = new TcpClient();
tcpclnt.Connect(this.txtIP.Text, 135);

tcpStream = tcpclnt.GetStream();
_name = this.txtName.Text;
_ip = this.txtIP.Text;
IsConnection = true;
this.btnSend.Enabled = true;
btnLink.Enabled = false;
这样会尝试去绑定已被占用还未释放的Socket,出异常!
解决就是在退出程序的事件中调用BreakConnection()