2017-01-23 44 views
0

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

PS,我确认连接和发送数据的工作。

编辑:稍微改变了我的代码。但仍然不起作用。任何想法的人?

即使数据发送给它,似乎也不会经过下面的行。

昏暗DataText作为字符串= 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 

回答

0

与下面码在接收任务解决:

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)