【发布时间】:2015-02-05 23:39:39
【问题描述】:
早上,
经过一番折腾,我终于让我的小型 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 日之前完成的项目:(
詹姆斯
【问题讨论】:
-
在 while 中放置断点会发生什么?.. 您的条件是在连接时运行,这意味着第一次是这样。将其更改为:Do While Not Client.Connected
-
如果你这样做,那么什么决定了它何时断开连接。?
-
您好 CodExer 先生,没有 ClientSocket.Disconnected。我将尝试一个计时器循环,我可以返回我的 TCP 流的第一个“已连接”消息,但不能返回它之后的所有流量。
-
Do until Not clientSocket.Connected 似乎对 CoDeXeR 先生很有魅力。
标签: vb.net tcp tcplistener