奇怪的tcpclient错误.头大死了。在线等
我用tcpclient做了个登陆 公司邮件服务器的程序(如上图)。
点击connect 按钮后连接,然后调用close释放连接 后退出。
我本机有2个IP,需要指定一个IP(192.168.1.101)发送。
采用如下代码bind绑定到本地。
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 25);
myServer = new TcpClient();
myServer.Client.Bind(ipPoint);
奇怪的事情发生了,当代码执行完一遍后,马上再按连接按钮,
出现 通常每个套接字地址(协议/网络地址/端口)只允许使用一次 的异常提示。
如果中间停止1-2分钟再点击连接,就不会出现这个问题。
查了很多资料。说是连接还没来得及放掉,要等。
但是如果把 myServer.Client.Bind(ipPoint); 即绑定这句去掉,
就不需要等待。好像close一执行就把所有资源放掉了。
但是我们必须在使用tcpclient时指定本地IP,怎样可以避免那个异常?
以下为代码部分。
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 25);
TcpClient myServer = null;
NetworkStream myNetStrm = null;
StreamReader myRdStrm = null;
try
{
myServer = new TcpClient();
myServer.Client.Bind(ipPoint);
myServer.Connect("220.181.12.66", 25);
myNetStrm = myServer.GetStream();
myRdStrm = new StreamReader(myServer.GetStream());
textBox1.AppendText(myRdStrm.ReadLine()+"\r\n") ;
}
catch (Exception ex)
{
textBox1.Text = ex.Message ;
}
finally
{
if (myNetStrm != null) { myNetStrm.Close(); myNetStrm = null; }
if (myServer != null) { myServer.Close(); myServer = null; }
}
------解决方案--------------------
监听服务是进程级的,如果弄成界面上“一会儿监听、一会儿close、一会儿又监听”,那就成了网上的一些培训“教师”写的根本不是产品中使用的demo代码的。