以下是我写的通讯那块程序,是PC机与PLC之间的通讯,PLC的地址为192.168.0.1,通讯端口为4000,目的是将sendTxtBox里面的内容发送到PLC,再将PLC接收到的内容返回到receiveTxtBox,调试得时候出现得问题是在sendTxtBox里面输入发送字符后,点击“Button1”根本没有反应啊,本来不想贴这么多程序的,大家看了也头疼,实在没办法了啊,被领导批得不行了,求救大家,谢谢了Imports System.Windows.Forms
Imports System.Threading
Imports System.Net.Sockets
Imports System.Net
Imports System.IOPublic Class CommunicationFrm    Delegate Sub SetTextCallback(ByVal s As String)    Private output As NetworkStream    Private writer As BinaryWriter
    Private reader As BinaryReader    Private message As String = ""
    Private readThread As Thread    Public Sub New()
        MyBase.New()        ' 此调用是 Windows 窗体设计器所必需的。
        InitializeComponent()        ' 在 InitializeComponent() 调用之后添加任何初始化。        readThread = New Thread(New ThreadStart(AddressOf RunClient))
        readThread.Start()    End Sub    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click        Try
            writer.Write(sendTxtBox.Text)
        Catch exception As SocketException            MessageBox.Show("Error writing object")        End Try    End Sub    Public Sub RunClient()        Dim client As TcpClient        Try            client = New TcpClient()
            client.Connect("192.168.0.1", 4000)            output = client.GetStream            writer = New BinaryWriter(output)
            reader = New BinaryReader(output)
            MessageBox.Show("网络已建立")            Try                Do
                    message = reader.ReadString
                    settext(vbCrLf & message)                Loop While message <> ""            Catch inputoutputexception As IOException
                MessageBox.Show("Client application closing")
            Finally                settext(vbCrLf & "Closing connection." & vbCrLf)
                writer.Close()
                reader.Close()
                output.Close()
                client.Close()            End Try        Catch ex As Exception
            MessageBox.Show("网络连接未建立")
        End Try
    End Sub    Private Sub settext(ByVal s As String)        If receiveTxtBox.InvokeRequired Then            Dim d As New SetTextCallback(AddressOf settext)
            Me.Invoke(d, New Object() {s})
        Else
            Me.receiveTxtBox.Text &= s
        End If    End Sub
End Class

解决方案 »

  1.   

    接受循环改一下看看
        Do 
                        message = reader.ReadString 
                        settext(vbCrLf & message)                 Loop While message <> "" 
    改成
    while true
    message = reader.ReadString 
    settext(vbCrLf & message) 
    End While
      

  2.   

    先改成C#再帮你看吧,VB看着头大.
      

  3.   

    Tcp服务端有没有建立?
    线程里调用的方法起作用了么?