VB.NET如何连续读取TCP流

标签 vb.net tcp tcplistener

早上好,

经过一番折腾后,我终于得到了我的小 TCP 监听器应用程序来连接到我的服务器并监听流量。

我能够连接并从端口获取初始响应,但它不会不断返回流流量,我需要不断监控端口流量,以便我可以有效地将其发布到数据库,任何人都可以帮助我如何我会循环播放这个吗?

这是我目前的代码:

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Runtime.InteropServices '   DllImport
Imports System.Security.Principal '  WindowsImpersonationContext
Imports System.Text

Public Class Form1

Private Delegate Sub AppendTextBoxDelegate(ByVal TB As RichTextBox, ByVal txt As String)

Private Sub AppendTextBoxes(ByVal TB As RichTextBox, ByVal txt As String)
    If TB.InvokeRequired Then
        TB.Invoke(New AppendTextBoxDelegate(AddressOf AppendTextBoxes), New Object() {TB, txt})
    Else
        TB.Text = ""
        TB.Text = RichTextBox1.Text + Environment.NewLine + " >> " + txt
    End If
End Sub

Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim serverStream As NetworkStream

Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
    AppendTextBoxes(RichTextBox1, "Client Started")
End Sub

Private Sub My_BgWorker_DoWork1(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    Try
        clientSocket.Connect("192.168.1.22", 21055)
        AppendTextBoxes(RichTextBox1, "Client Socket Program - Server Connected ...")

        Dim serverStream As NetworkStream = clientSocket.GetStream()

        If serverStream.CanRead Then
            Do While clientSocket.Connected
                Dim outStream As Byte() = _
                System.Text.Encoding.ASCII.GetBytes("Message from Client$")
                serverStream.Write(outStream, 0, outStream.Length)
                serverStream.Flush()

                Dim inStream(10024) As Byte
                serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize))
                Dim returndata As String = _
                System.Text.Encoding.ASCII.GetString(inStream)
                AppendTextBoxes(RichTextBox1, "Data from Server : " + returndata)
                Console.WriteLine("Data from Server : " + returndata)
            Loop
        Else
            AppendTextBoxes(RichTextBox1, "No Data to Receive")
            clientSocket.Close()
            serverStream.Close()
        End If
    Catch ex As Exception
        MessageBox.Show(Environment.NewLine & ex.Message & Environment.NewLine & ex.StackTrace, "Dumping To Log", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    End Try

End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, _
ByVal e As System.ComponentModel.ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged

    'AppendTextBoxes(RichTextBox1.Text, "DONE!")
    'ProgBar.Value = e.ProgressPercentage

End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
    If e.Cancelled Then
        MsgBox("Cancelled")
    End If

    Console.WriteLine("Finished Processing - Background Worker 1")
    AppendTextBoxes(RichTextBox1, "Finished Getting Stream!")

End Sub
End Class

非常感谢任何帮助,这是我需要在 2015 年 1 月 1 日之前完成的项目:(

詹姆斯

最佳答案

您有连接时运行的条件,这意味着第一次是这样。将其更改为:

 Do Until Not Client.Connected 

关于VB.NET如何连续读取TCP流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355916/

相关文章:

arrays - 在vb.net中将base64解码为图像

linux - TCP 发送队列卡住

java - 打开 SSL TCP 套接字并发送 Web 请求

c# - 如何在 F# 中使用 TcpListener NetworkStream?

go - 客户端无法将数据发送到 golang 中的 TCP 服务器?

c# - .NET 编程 - 我可以从我的 VB.NET 项目访问 C-Sharp 项目的成员吗?

mysql - 在 VB 中从 MySQL 数据库获取第一个条目

c# - 使用 TCP 时,我是否需要使用校验和来保护我的消息?

c# - 将 SSL 添加到 TcpListen 服务器?

c# - 同步生产和测试数据库的方法