Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 这里怎么了?(TCP服务器/客户端、跨线程字段、编码)_Vb.net_Multithreading_Networking_Encoding - Fatal编程技术网

Vb.net 这里怎么了?(TCP服务器/客户端、跨线程字段、编码)

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

我试着做一个非常简单的测试项目来体验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
    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