我怎么能';无法从套接字缓冲区UWP读取数据

我怎么能';无法从套接字缓冲区UWP读取数据,uwp,stream-socket-client,Uwp,Stream Socket Client,我正试图编写一个DLL文件来处理我的UWP应用程序的套接字,就像我为我的winforms应用程序所做的那样。问题是我刚刚开始编写UWP应用程序。我的原始套接字控制DLL文件将启动一个接收线程,每隔100毫秒从套接字读取并引发一个事件。我试着在我的UWP DLL中做同样的事情,但它似乎不适用于我从MSDN网站复制的代码。有人能看看我做错了什么吗?我不会撒谎,我以前从未使用过任务(线程似乎更容易) 另外,我已经确认连接和发送数据是有效的 编辑:稍微更改了我的代码。但还是不行。各位有什么想法吗 似乎没

我正试图编写一个DLL文件来处理我的UWP应用程序的套接字,就像我为我的winforms应用程序所做的那样。问题是我刚刚开始编写UWP应用程序。我的原始套接字控制DLL文件将启动一个接收线程,每隔100毫秒从套接字读取并引发一个事件。我试着在我的UWP DLL中做同样的事情,但它似乎不适用于我从MSDN网站复制的代码。有人能看看我做错了什么吗?我不会撒谎,我以前从未使用过任务(线程似乎更容易)

另外,我已经确认连接和发送数据是有效的

编辑:稍微更改了我的代码。但还是不行。各位有什么想法吗

似乎没有越过下面的行,即使数据被发送到它

Dim DATATEXTEXT作为字符串=Reader.ReadToEnd

Imports Windows.Networking

Imports Windows.Networking.Sockets

Public Class ClientSocket

Private CSocket As New StreamSocket

Dim strHost As String = "192.168.0.11"

Dim RPort As String = "80"

Private killswitch As Boolean = False

Public Event SocketError(ByVal Operation As String, ByVal ErrorMessage As String)

Public Event DataReceived(ByVal DataString As String)

Public Async Sub Connect()

    Try

        Dim RHost As HostName = New HostName(strHost)

        Await CSocket.ConnectAsync(RHost, RPort)

        ReceiveTask.Start()

    Catch ex As Exception

        RaiseEvent SocketError("Connecting", ex.Message)

    End Try

End Sub

Public Sub Disconnect()

    killswitch = True

    CSocket.Dispose()

End Sub

Public Async Sub SendText(ByVal SendString As String)

    Try

        Dim OutStream As Stream = CSocket.OutputStream.AsStreamForWrite

        Dim Writer As StreamWriter = New StreamWriter(OutStream)

        Await Writer.WriteLineAsync(SendString)

        Await Writer.FlushAsync

    Catch ex As Exception

        RaiseEvent SocketError("Sending", ex.Message)

    End Try

End Sub

Private ReceiveTask As New Task(Sub()

                                    Dim InStream As Stream = CSocket.InputStream.AsStreamForRead

                                    Dim Reader As StreamReader = New StreamReader(InStream)

                                    While killswitch = False

                                        Try

                                            Dim DataText As String = Reader.ReadToEnd

                                            RaiseEvent DataReceived(DataText)

                                        Catch ex As Exception

                                            RaiseEvent SocketError("Receiving", ex.Message)

                                        End Try

                                        Task.Delay(TimeSpan.FromSeconds(1))

                                    End While

                                End Sub)

Public Property Host As String

    Get

        Host = strHost

    End Get

    Set(value As String)

        strHost = value

    End Set

End Property

Public Property Port As String

    Get

        Port = RPort

    End Get

    Set(value As String)

        RPort = value

    End Set

End Property

End Class

在接收任务中使用以下代码解决:

    Private ReceiveTask As New Task(Sub()

                                    Dim InStream As Stream = CSocket.InputStream.AsStreamForRead

                                    While killswitch = False

                                        Try

                                            Dim Reader As StreamReader = New StreamReader(InStream)

                                            Dim DataText As String = ""

                                            While Reader.Peek <> -1

                                                DataText &= Convert.ToChar(Reader.Read)

                                            End While



                                            RaiseEvent DataReceived(DataText)

                                        Catch ex As Exception

                                            RaiseEvent SocketError("Receiving", ex.Message)

                                        End Try

                                    End While

                                End Sub)
Private ReceiveTask作为新任务(Sub()
作为流的Dim流入=CSocket.InputStream.AsStreamForRead
而killswitch=False
尝试
作为StreamReader的Dim读卡器=新StreamReader(流内)
Dim DataText As String=“”
而Reader.Peek-1
DataText&=Convert.ToChar(Reader.Read)
结束时
已接收RaiseEvent数据(DataText)
特例
RaiseEvent插座错误(“接收”,例如消息)
结束尝试
结束时
末端接头)