Vb.net 这里怎么了?(TCP服务器/客户端、跨线程字段、编码)
我试着做一个非常简单的测试项目来体验vb.NETTCP/ip的东西。尽管这与我的最终目标无关,但我还是想弄清楚为什么这个东西不能像预期的那样工作Vb.net 这里怎么了?(TCP服务器/客户端、跨线程字段、编码),vb.net,multithreading,networking,encoding,Vb.net,Multithreading,Networking,Encoding,我试着做一个非常简单的测试项目来体验vb.NETTCP/ip的东西。尽管这与我的最终目标无关,但我还是想弄清楚为什么这个东西不能像预期的那样工作 Imports System.Net.Sockets Imports System.Net Imports System.Threading Public Class Form1 Public listener As New TcpListener(50000) Public outClient As New TcpClient
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Public Class Form1
Public listener As New TcpListener(50000)
Public outClient As New TcpClient
Public outStream As NetworkStream
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
listener.Start()
Dim t As New Threading.Thread(AddressOf listenersub)
t.Start()
outClient.Connect(New IPAddress({127, 0, 0, 1}), 50000)
outStream = outClient.GetStream
End Sub
Public inClient As TcpClient
Public inStream As NetworkStream
Private Sub listenersub()
inClient = listener.AcceptTcpClient
inStream = inClient.GetStream
Dim inBuffer(inClient.ReceiveBufferSize - 1) As Byte
tbWrite("connected")
While True
If inClient.Available >= 22 Then
inStream.Read(inBuffer, 0, inClient.ReceiveBufferSize)
tbWrite(System.Text.UnicodeEncoding.Unicode.GetString(inBuffer))
End If
Thread.Sleep(1)
End While
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim b() As Byte = System.Text.UnicodeEncoding.Unicode.GetBytes("Hello there")
outStream.Write(b, 0, b.Count)
End Sub
Public WithEvents tbTimer As New Windows.Forms.Timer() With {.Enabled = True, .Interval = 100}
Public tbText As String = ""
Public tiText As String = ""
Public Sub tbWriter() Handles tbTimer.Tick
TextBox1.Text = tbText
Me.Text = tiText
End Sub
Public Sub tbWrite(s As String)
SyncLock tbText
tbText = s & vbNewLine & tbText
End SyncLock
End Sub
Public Sub tiWrite(s As String)
SyncLock tiText
tiText = s
End SyncLock
End Sub
End Class
在设计器端,应该有一个名为textbox1的多行文本框和一个按钮“button2”。我所期望的是,每当我按下按钮2时,文本框中就会出现一行新的“Hello there”,实际发生的是,我得到的是“Hello there”,但只有一行。我想不出这个问题。我在尝试远程登录设备时遇到了类似的问题。 解决方法是替换字节流中的“0”,然后将其提供给GetString 这就是我所做的
Dim tcp_bytes As UInt32 = rtr_w.Read(tcp_data, 0, tcp_data.Length)
If tcp_data.Contains(0) Then
For j As UInt16 = 0 To tcp_bytes - 1
'converting 0 to 32 to avoid line termination issues
If tcp_data(j) = 0 Then tcp_data(j) = 32
Next
end if