为什么会报异常!
hqmmf 2005-03-21 06:02:13 1。在mdi主窗体中进行监听,在一个打开的子窗体中发送,为什么退出后会报异常!谢谢!
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Public Class Form1
Inherits System.Windows.Forms.Form
Private th As New Thread(AddressOf Listen) '一个线程
Private tcpl As New TcpListener(5656) '从 TCP 网络客户端侦听连接。
Private listenerRun As Boolean = True
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
th.Start()
End Sub
Private Sub Listen()
Try
'服务器端,从 TCP 网络客户端侦听连接,5656是端口号
'Dim tcpl As New TcpListener(5656)
tcpl.Start() '开始侦听
'StatusBar1.Text = "正在监听..."
While listenerRun '一直进行监听
'接受挂起的连接要求
Dim s As Socket = tcpl.AcceptSocket()
'定义一个数组作为数据缓冲区
Dim stream(80) As Byte
'将数据从连接的sokets接受到接受缓冲区的特定位置
'stream是接受到的数据的存储位置
Dim i As Integer = s.Receive(stream)
'将接收的数据进行解码,使用UTF8编码格式。
Dim message As String = System.Text.Encoding.UTF8.GetString(stream)
'richTextBox1.AppendText(message)
MessageBox.Show(message)
End While
Catch ex As System.Security.SecurityException '检测到安全性错误引发的异常
MessageBox.Show("防火墙安全错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Catch ex As Exception
MessageBox.Show(ex.Message, "kaishi")
'MessageBox.Show("error!")
'StatusBar1.Text = "已停止监听!"
End Try
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Dim newform As New Form2()
newform.MdiParent = Me
newform.show()
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Try
listenerRun = False
tcpl.Stop() '停止侦听
th.Abort() '终止线程
Catch ex As Exception
MessageBox.Show(ex.Message, "11")
End Try
End Sub
End Class
///////////////////
在form2中
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Send()
End Sub
Private Sub Send()
Try
Dim msg As String = "工单已完成!"
'初始化 TcpClient 类的新实例并连接到指定主机上的指定端口
Dim tcpc As TcpClient = New TcpClient("192.254.63.221", 5656)
'返回发送或接受数据的流
'NetworkStream 提供用于网络访问的基础数据流()
Dim tcpstream As NetworkStream = tcpc.GetStream()
Dim reqstreamw As StreamWriter = New StreamWriter(tcpstream)
reqstreamw.Write(msg)
reqstreamw.Flush() '清除当前编写器的所有缓冲区,并使所有缓冲数据写入基础流
tcpstream.Close()
tcpc.Close() '客户端连接关闭
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try