函数调用出现的怪问题
就是下面两个函数,在GetNumOfNewMail调用connect函数。
现在出现个奇怪问题,如果Connect中的'sr.Close() 不屏蔽,在GetNumOfNewMail中就会出错。如果屏蔽掉就不会出错。
我初学.net,搞不明白,两个函数中的不同变量难道可以互相影响?
Private Function Connect() As NetworkStream
Dim sender As New TcpClient("pop.163.com", 110)
Dim outbytes As Byte()
Dim input As String
Dim ns As NetworkStream = Nothing
Try
ns = sender.GetStream
Dim sr As New StreamReader(ns)
Console.WriteLine(sr.ReadLine)
input = "user hsn1982" + vbCrLf
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray())
ns.Write(outbytes, 0, outbytes.Length)
Console.WriteLine(sr.ReadLine)
input = "pass minhuacat" & vbCrLf
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray())
ns.Write(outbytes, 0, outbytes.Length)
Console.WriteLine(sr.ReadLine)
'sr.Close() '这行
Return ns
Catch ex As InvalidOperationException
Console.WriteLine("Connet pop server fail!")
Return ns
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Function
Private Function GetNumOfNewMail() As Integer
Dim outbytes As Byte()
Dim input As String
Try
Dim ns As NetworkStream = Connect()
Dim sr1 As New StreamReader(ns) ''出错代码
input = "stat" + vbCrLf
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray())
ns.Write(outbytes, 0, outbytes.Length)
Dim resp As String = sr1.ReadLine()
Console.WriteLine(resp)
Dim tokens As String() = resp.Split(" ".ToCharArray)
input = "quit" + vbCrLf
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray())
ns.Write(outbytes, 0, outbytes.Length)
Console.WriteLine(sr1.ReadLine())
sr1.Close()
ns.Close()
Return Integer.Parse(tokens(1))
Catch ex As Exception
Console.WriteLine(ex.ToString)
Return 0
End Try
End Function
错误信息:
System.ArgumentException: 流不可读。
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByte
OrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(Stream stream)
at VBStudioDemo.Module1.GetNumOfNewMail() in E:\net\VBStudioDemo\ModMain.vb:line 44