掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
UDPで受信しながらデータをファイルへ保存するには? (ID:141344)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
我龍院様、魔界の仮面弁士様ありがとうございます。 追記保存処理をメインスレッド側に追い出す考え方でコードを組んでみました。 (ReceiveDataの中でグローバル変数のudp,remoteEPのe経由の扱い方がわからなかったのでそのままにしています。また、一時バッファもrcvBytesのままにしています。) Public Class Form1 Const TEST_FILE As String = "RcvData.bin" Private j As Integer = 0 Dim blReceiving As Boolean = False Dim LocalPort As Integer = 20000 Dim udp As New UdpClient(LocalPort) Dim remoteEP As New IPEndPoint(System.Net.IPAddress.Any, 0) Private fs As New FileStream(TEST_FILE, FileMode.Create) '受信開始(受信開始ボタンクリック) Private Sub Button1_Click(...) Handles Button1.Click blReceiving = Not blReceiving If blReceiving = True Then Button1.Text = "受信停止" bgWorker1.RunWorkerAsync() Else Button1.Text = "受信開始" bgWorker1.CancelAsync() End If End Sub 'データ受信スレッド Private Sub bgWorker1_DoWork(...) Handles bgWorker1.DoWork Dim worker As BackgroundWorker = CType(sender, BackgroundWorker) Do ReceiveData(worker) Loop Until worker.CancellationPending End Sub 'データを受信する Private Sub ReceiveData(ByVal worker As BackgroundWorker) Static i As Integer = 0 Dim rcvBytes As Byte() = udp.Receive(remoteEP) worker.ReportProgress(0, rcvBytes) i = i + 1 End Sub Private Sub bgWorker1_ProgressChanged(...) Handles bgWorker1.ProgressChanged Dim saveBytes As Byte() = CType(e.UserState, Byte()) fs.Write(saveBytes, 0, saveBytes.Length) j = j + 1 End Sub End Class 結果的には、受信できたパケット数はあまり変わりませんでした。 (気持ち上がったかなという程度) .ReportProgress(0, rcvBytes)によって保存処理がメインスレッドに移ったのですぐに受信状態になりデータを受け取れると考えていたのですが。。。 i,jでReceiveData()と.ProgressChanged()の実行回数を比較したのですが同じでしたので、前と同じで受信が間に合ってないのかなと考えています。 次はFileStreamを使ってBeginWriteでファイル保存をしてみるつもりです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.