0

私のアプリケーションは TCP 経由でコマンドを受信して​​います。コマンドを比較しようとすると、比較は常に失敗します。

メッセージは byte() に変換されて戻されますが、以下の例では問題ありませんか? または、何か不足していますか?

Imports MyApp.Client

Public Class Form1
    Public Delegate Sub MessageReceivedHandler(ByVal message As String)

    Private Sub Message_Received(ByVal message As String)
        'update the display using invoke
        Invoke(New MessageReceivedHandler(AddressOf PrintToScreen), New Object() {message})
    End Sub

    Private Sub PrintToScreen(ByVal msg As String)
        Select Case msg
            Case "#all"
                'Do Something
            Case Else
                'Do Something Else
        End Select
    End Sub
End Class


'Client class
Public Class Client
    Private _tcpClient As TcpClient
    Public Event MessageReceived As MessageReceivedHandler

    Public Sub Connect(ByVal address As IPAddress, ByVal port As Integer)
        _tcpClient = New TcpClient()
        Dim serverEndPoint As New IPEndPoint(address, port)
        _tcpClient.Connect(serverEndPoint)
        ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf Read))
    End Sub

    Public Sub Send(ByVal buffer As Byte())
        _tcpClient.GetStream().Write(buffer, 0, buffer.Length)
        _tcpClient.GetStream().Flush()
    End Sub

    Private Sub Read()
        Dim encoder As New ASCIIEncoding()
        Dim buffer As Byte() = New Byte(4095) {}
        Dim bytesRead As Integer
        While True
            Try
                bytesRead = _tcpClient.GetStream().Read(buffer, 0, 4096)
                RaiseEvent MessageReceived(encoder.GetString(buffer, 0, bytesRead).ToString)
            Catch ex As IO.IOException
                Application.Exit()
            End Try
        End While
    End Sub

    Public Sub Dispose()
        _tcpClient.Close()
    End Sub
End Class

変数はケースと同じテキストを含む文字列ですが、比較に失敗します:

メッセージ変数

4

1 に答える 1

2

問題が見つかりました。送信アプリケーションは、byte() に変換して送信する前に、文字列の末尾に vbNullChar を追加していました。(受信側で変換された文字列から削除する方法が見当たりませんでした)

于 2012-07-31T14:12:05.390 に答える