读书人

奇怪的tcpclient异常.头大死了

发布时间: 2012-04-16 16:20:04 作者: rapoo

奇怪的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代码的。

读书人网 >C#

热点推荐