ユニバーサル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の不正使用ですが、確認や拒否のために多くの情報を見つけることができません。 (私はそれで何をやっているのか知っていると思うが、私は危険なほどに知っているレベルにいるかもしれない...)
とにかく、どんな入力でも大歓迎です。ありがとう。
スケールがEOL(\ nまたは\ rまたは\ r \ n)HEX 13および/または10?スケールが送信しないことをあなたのコードが待っているのを見ることができました。あなたがどのようなスケールを使用しているのか、それともあなたのアプリケーションがどのくらい速く話すのかは分かりませんが、スケールが連続フィードの場合は、スケールやすべてのパーツがうまく機能しませんあなたはこのイベントを処理する時までに(少しでも後で) –
@Someonethatmattersそれは非常によく問題になる可能性がある物事をバッファリングし、重量がなくなります。テスト用ユーティリティは新しい行を表示しません(ただし、そのように設計することはできます)。私はEOLが必要かどうかを尋ねるスケールをプログラミングする人を覚えています。私はそれを調べます。目盛りは写真目です。最初のものが渡されたときに重み付けを開始し、2番目のもので停止します。スケールは計算を実行し、設定されたIPアドレス(私のアプリケーションが実行される)に送信します。 – sjoachim
@Someonethatmattersそれが問題でした。あなたがそれに答えたいなら、私はそれを答えとして選択します。 – sjoachim