2017-08-01 11 views
0

ユニバーサルWindowsプラットフォームアプリケーションでソケットリスナーをセットアップしようとしています。このアプリはRaspberry PIで動作し、インモーションスケールからの通信を待ち受けます。UWP(VB.Net)StreamSocketListenerが接続イベントを起動しない

メインVMファイルにStreamSocketListenerをセットアップしました。私はそれを開始し、停止するコマンドがあります。私は見つけることができるオンラインのいくつかのガイドに従ってきましたが、スケールがデータを送信するときにイベントを起動しません。ダウンロードしたリスナーアプリでテストしましたので、メッセージが送信されていることを確認でき、コンピュータが受信できます(ファイアウォールの問題はありません)。 (私はまた、1つのアプリケーションだけがポートを聞くことができることを知っているので、私のプログラムをテストするときにこのテスターはオフになっています)。

最初に接続を開始したときに、何かもう一度。エラーは発生せず、何も起こりません。

コマンド:

Public Property cmdStart As New Command(Async Sub() Await StartListener(), True) 
Public Property cmdStop As New Command(Sub() StopListener(), True) 

コマンドサブルーチン:

Private Async Function StopListener() As Task 
    If Connected Then 
     Await _prePriceListener.CancelIOAsync() 
     RemoveHandler _prePriceListener.ConnectionReceived, Nothing 
     _prePriceListener.Dispose() 
     Connected = False 
    End If 
End Function 

Private Async Function StartListener() As Task 
    If ValidateInput() Then 
     Try 
      _prePriceListener = New StreamSocketListener() 
      _prePriceListener.Control.KeepAlive = False 
      AddHandler _prePriceListener.ConnectionReceived, AddressOf HandlerReceived 
      Await _prePriceListener.BindServiceNameAsync("6021") 
      Connected = True 
     Catch ex As Exception 
      Message = ex.Message 
     End Try 
    End If 
End Function 

イベントハンドラ:_prePriceListener.Control.KeepAliveは真と偽の両方に設定して、私が試した

Private Async Function HandlerReceived(sender As StreamSocketListener, args As StreamSocketListenerConnectionReceivedEventArgs) As Task 
    Dim msgReceived As String = "" 
    Dim inStream As Stream 
    Dim reader As StreamReader 
    Try 

     inStream = args.Socket.InputStream.AsStreamForRead() 
     reader = New StreamReader(inStream) 
    Catch ex As Exception 
     Return 
    End Try 

    Try 
     If reader IsNot Nothing Then 
      msgReceived = Await reader.ReadLineAsync() 
      HandlePrepriceRead(msgReceived) 
     End If 
    Catch ex As Exception 
     Return 
    End Try 
End Function 

。 trueの場合、ハンドラのmsgReceived = Await reader.ReadLineAsync()がハングします。私はそれが問題だと思うが、私が見つけたすべての修正は違いをもたらさなかった。私の唯一の疑いはAsync/Awaitの不正使用ですが、確認や拒否のために多くの情報を見つけることができません。 (私はそれで何をやっているのか知っていると思うが、私は危険なほどに知っているレベルにいるかもしれない...)

とにかく、どんな入力でも大歓迎です。ありがとう。

+0

スケールがEOL(\ nまたは\ rまたは\ r \ n)HEX 13および/または10?スケールが送信しないことをあなたのコードが待っているのを見ることができました。あなたがどのようなスケールを使用しているのか、それともあなたのアプリケーションがどのくらい速く話すのかは分かりませんが、スケールが連続フィードの場合は、スケールやすべてのパーツがうまく機能しませんあなたはこのイベントを処理する時までに(少しでも後で) –

+0

@Someonethatmattersそれは非常によく問題になる可能性がある物事をバッファリングし、重量がなくなります。テスト用ユーティリティは新しい行を表示しません(ただし、そのように設計することはできます)。私はEOLが必要かどうかを尋ねるスケールをプログラミングする人を覚えています。私はそれを調べます。目盛りは写真目です。最初のものが渡されたときに重み付けを開始し、2番目のもので停止します。スケールは計算を実行し、設定されたIPアドレス(私のアプリケーションが実行される)に送信します。 – sjoachim

+0

@Someonethatmattersそれが問題でした。あなたがそれに答えたいなら、私はそれを答えとして選択します。 – sjoachim

答えて

0

スケールがEOL(\ nまたは\ rまたは\ r \ n)HEX 13および/または10を送信していますか?スケールが送信しないことをあなたのコードが待っているのを見ることができました。あなたがどのようなスケールを使用しているのか、それともあなたのアプリケーションがどのくらい速く話すのかは分かりませんが、スケールが連続フィードの場合は、スケールやすべてのパーツがうまく機能しませんあなたがこのイベントを処理する時には、物事をバッファリングして重量がなくなります(少なくとも一番後で)

関連する問題