DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
UpDateレンタルサーバからファイルを取得する方法を教えてください。(12) | Nomalユーザーコントロールのプロパティが保存されない(0) | NomalIEnumerableについてまとめてみました。(2) | NomalWindows標準TCPIPポートについて(3) | NomalスレッドのwebbrowserでDocumentCompletedが来ない(2) | NomalList(of T)の抽出方法(3) | Nomalあまりにも基本的なことですが。(3) | NomalWindows10(1803)からGetHostEntryでipv4が取得出来ない場合がある(1) | NomalVB.netで作成されたプログラムからAccessのレポート印刷時にバーコードが表示されない(2) | NomalTextBoxの最大バイトを超えた分の文字を消す際の不具合(2) | Nomal折れ線グラフで基準値以内と基準値超過で色変え(6) | NomalFriend設定されているdllを利用することができますか?(3) | Nomal縦横変換してのTableの合算(4) | Nomalhtmlファイルへの関連付け(2) | NomalDataTableにSQLを実行できますか?(6) | Nomal.netからのAccessパスワード解除(2) | Nomal天気.jpに切断されます(2) | Nomalgifの容量をできるだけ軽くしたい(11) | NomalVB.NETでXMLファイルからデータを取得したい(2) | NomalAddStringの使い方(5) | NomalVS2015 Express インストール時のエラー(7) | Nomal2枚のPictureBoxを合成した上で描画したい(6) | Nomal自作ツールを標準ブラウザ候補に入れるには?(3) | NomalGraphicsUnit.Document使用時に解像度に合わせて位置決めしたい(2) | Nomal文字を円弧に沿って表示させたい(5) | Nomalユーザーコントロールをツールバーに表示できない(7) | Nomal【お知らせ】スマホでも見やすくなりました(0) | NomalVB.NetのWebBrowserでJavaScriptを呼び出したい(2) | Nomalサムネイルを新しい順にファイル名のみで表示したい。(4) | NomalEXCELでクリップボードを使用せずに書式付きでセルをコピー(5) | NomalDataGridView内でコンボボックスの選択をキャンセルする方法(1) | Nomalタブの色を他の処理から変更する方法(2) | Nomal同じデータセット内にテーブルの複製を作る方法(4) | Nomal配列を持つ自作クラスで、入れ替える関数を作成したい。(3) | NomalPowerPointをVBAでPDF化したい(0) | Nomalvs2017のC#で”現在のコンテキストに"Console"という名前は存在しません"と表示される(2) | NomalASP.NET 数分の処理でaspxの応答が無くなる(2) | NomalCSVのTextFieldParser読込時のオリジナル1行データの取得について(2) | NomalC# enum命名規則の抜け道(2) | Nomalマルチスレッドにおける画面の更新(4) | NomalCrystalReport 実行時にレポートエラー(0) | NomalCSVファイルから指定行を1行削除したい(2) | NomalDataGridView内での集計行追加を行いたい(6) | Nomal【VB.net】特殊なキーのコードとイベント(3) | Nomal「 No33447 の投稿について、質問があります」# webbrowserでjqueryのイベントを発生させたい(3) | Nomalwebbrowserでjqueryのイベントを発生させたい(7) | NomalVB.NETでの TCPClient通信をByteのみでしょうか?(3) | Nomal仮想デスクトップのスクリーンキャプチャ(Windows10, C#)(0) | NomalVB.netでPDF-XChange Viewerの印刷設定(2) | NomalExcel オートメーションエラーとなってしまう(1) | NomalPictureBoxで動画を2回目に表示させる際に0除算エラーが起きる。(0) | NomalListViewに動画ファイルのサムネイルを表示する(2) | NomalPictureBoxに動画を表示させた後に静止画を表示させる(3) | Nomal非同期デリゲートとスレッドプール(2) | NomalフォームのボタンがONと同じようにスイッチONでも動作させたい(0) | Nomal複数の図形を重ねて描画するには(4) | NomalSNSへ自動投稿したい(2) | Nomal外部アプリケーションのアクティブ化(0) | Nomal「UDP」65535byteを超える画像データの送信(4) | Nomal画像の中心で回転させたい(3) | NomalPLCとの通信PGMの設計(1) | Nomalディスプレイの認識番号を求めたい(8) | NomalListViewの画像のドラッグアンドドロップ(14) | NomalMaskedTextBoxに丸囲み数字が入力できない(2) | NomalFTPにてリモート サーバーがエラーを返しました: (550) (1) | Nomalエンターキーでのコントロール移動(4) | Nomalメッセージの表示(1) | NomalThreading.Threadで戻り値を取得したい(8) | NomalPOSTとブラウザで動きが違うのはなぜでしょう?(6) | NomalUIスレッド使用中のBeginInvoke(5) | NomalForm起動時の例外スローが発生する原因が知りたい(1) | NomalASP.NET(VB.NET)でMapHubsを利用したい(2) | NomalForm1内のForm2でのTextBox入力がうまくいかない(6) | NomalnpgsqlでのExecuteScalarとExecuteReaderの扱いについて(2) | Nomalすきーむ りすと(2) | Nomalユーザーコントロールで自作のBackColorプロパティを使いたい(3) | NomalDataGridViewのRowLeaveのキャンセルについて(1) | Nomalプロパティウィンドウのカスタマイズ(2) | NomalCSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される(4) | NomalIE11のダウンロード通知バーの保存を押したい(2) | Nomalmagick.net c# PDFの総ページ数取得(2) | NomalレジストリCLSIDの検索(4) | Nomalウィルスバスターについての質問(2) | NomalVB6からC#への変換時のエラー(1) | Nomal文字列配列からCheckedListBoxにチェック適用(4) | NomalC# Excelの列名の取得(3) | NomalWinサービスのサービス名をconfig化したい(1) | Nomalバッチで最新の環境変数を取得したい(4) | NomalWin7で開発したソフトがWin10で動かない(2) | Nomalテキストボックスのプロパティno(2) | NomalInternet Explorer Webページ保存のデフォルトフォルダ(1) | NomalASP.NETでネットワーク接続が切れた場合(0) | Nomalvb.net複数行入力テキストでのRETURNでの改行ができない(6) | Nomal中国語OSのFrameworkインストール画面の文字化け(1) | NomalExcelファイル内の画像取り込み(2) | NomalC# npgsqlでの動作(2) | Nomalコンボボックス継承で独自フォームの表示(1) | Nomalあらゆる例外がTargetInvocationExceptionで出力される。(5) | NomalListViewのページは指定できるのでしょうか?(ASP.NETではありません)(2) | Nomal追加したイベントハンドらが動かない。(2) |



■記事リスト / ▼下のスレッド
■33941 / 親記事)  レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ 新米 一般人(1回)-(2018/08/02(Thu) 08:40:50)
  • アイコン環境/言語:[win7 VB.net framework4.0 HTTP通信] 
    分類:[.NET] 

    あるレンタルサーバからファイルを
    取得するツールを作成しております。
    ログインしてcookieの取得まではでき、
    ファイルは一応にダウンロード出来ているようですが、
    ダウンロードしたファイルの中身が空の状態です。
    この問題の解決方法を教えてください。
    ダウンロードしたのはテキストファイルです。

    〈参考〉
    ダウンロードに使用している関数は
    WebClientのDownloadFileです。
    WebBrowserでレンタルサーバのページを開き、
    その後、WebBrowserで取得したcookieを
    WebClientに渡して実行しています。

    コードを掲載できておらず申し訳ないですが、
    宜しくお願い致します。

    以上、宜しくお願い致します。
違反を報告
引用返信

▽[全レス12件(ResNo.8-12 表示)]
■33952 / ResNo.8)  Re[8]: レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ 魔界の仮面弁士 大御所(1140回)-(2018/08/07(Tue) 08:59:02)
  • アイコンNo33951に返信(新米さんの記事)
    > 私がダウンロードで送信したメッセージは
    > 200で応答が帰ってきております。
    レスポンス(応答)を受け取るための
    リクエスト(要求)の差異を見れば分かりそうですね。


    > 使用しているレンタルサーバは
    > hetemlftpです。
    ヘテムルなら FTPS を使えば良いのでは?
    https://msdn.microsoft.com/ja-jp/library/system.net.ftpwebrequest.enablessl.aspx
    http://ummt.jp/tech/article/index.php?type=csharp&sid=140714_01
違反を報告
引用返信
■33954 / ResNo.9)  Re[9]: レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ 新米 一般人(6回)-(2018/08/07(Tue) 20:45:10)
  • アイコン魔界の仮面弁士さん
    ありがとうございます。

    > レスポンス(応答)を受け取るための
    > リクエスト(要求)の差異を見れば分かりそうですね。
    確認してみます。

    > ヘテムルなら FTPS を使えば良いのでは?
    情報ありがとうございます。
    参考にしてやってみます。
違反を報告
引用返信
■33963 / ResNo.10)  Re[10]: レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ 新米 一般人(7回)-(2018/08/17(Fri) 18:23:16)
  • アイコンNo33954に返信(新米さんの記事)
    魔界の仮面弁士さん

    返信が遅くなり申し訳ありません。

    参考で教えて頂いたFTPのコードにて所得を行ってみたのですが、
    認証がうまくクリアできずにファイルの取得ができませんでした。

    Fiddlerを使用したのですが、リクエストの差分が見つかりませんでした。
    「submit」された際のページにて、サーバ側でダウンロードやアップロードなどの
    コードをjavaで作成しているようです。
    IEの開発者ツールで、ダウンロード実行後のコードを解析し、
    「https://webftp.heteml.jp/file/download/root/setting.ini」という
    URLを作成していることろまではわかったのですが、
    これでファイルを取得しようとすると空のファイルが取得されます。
    「https://webftp.heteml.jp/root/setting.ini」でファイルを取得しようとすると
    添付ファイルのようにHTMLの結果が返ってきます。

    リクエストでファイルの場所が正しく指定できていないことが
    原因と考えているのですが、ファイルの場所を探す方法が検討つかずに
    困っております。
    (それ以外の原因かもしれませんが、それも検討が付きません。)


    何か現状に対してアドバイスを頂けますと助かります。
    いつも丸投げのような質問で申し訳ないですが、
    宜しくお願い致します。

イメージ
tmp.zip
/7KB
違反を報告
引用返信
■33964 / ResNo.11)  Re[11]: レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ sinmai 一般人(1回)-(2018/08/17(Fri) 20:21:22)
  • アイコンNo33963に返信(新米さんの記事)

    魔界の仮面弁士さん

    お世話になります。

    おかげ様でファイルのダウンロードができました。

    FFFTPでファイルのURLがわかったので、
    参考として教えて頂いたコードに設定して実行したところ、
    問題なくファイルのダウンロードに成功しました。

    いろいろとアドバイス頂いて本当にありがとうございました。

    本スレッドはこれにて解決済みとさせて頂きます。
解決み!
違反を報告
引用返信
■33965 / ResNo.12)  Re[12]: レンタルサーバからファイルを取得する方法を教えてください。
□投稿者/ 新米 一般人(8回)-(2018/08/17(Fri) 20:24:54)
  • アイコンNo33964に返信(sinmai さんの記事)

    魔界の仮面弁士さん

    Nameがアルファベット表記になっておりました。
    申し訳ありません。
    いろいろとご教授頂き本当にありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-9] [10-12]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■33962 / 親記事)  ユーザーコントロールのプロパティが保存されない
□投稿者/ 猫まっしぐら 一般人(5回)-(2018/08/14(Tue) 17:29:17)
  • アイコン環境/言語:[Windows7 VB.net2005] 
    分類:[.NET] 

    毎度お世話になってます
    
    ユーザーコントロールのプロパティ(Font,BackColor,ForeColor)が
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
        Public Overrides Property Font() As Font
            Get
                Return MyBase.Font
            End Get
    
            Set(ByVal val As Font)
                MyBase.Font = val
                MyFont = val
    
                Return
            End Set
        End Property
    
    とやっても貼り付けたフォームのデザインモードで保存されません
    とりあえずこの3つのプロパティ以外は保存されているようですし、プロパティ一覧でも
    ボールドにはなっていますが保存されません
    
    何が足りないのでしょう…

違反を報告
引用返信



■記事リスト / ▼下のスレッド / ▲上のスレッド
■33959 / 親記事)  IEnumerableについてまとめてみました。
□投稿者/ いちご 一般人(5回)-(2018/08/13(Mon) 21:56:25)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    For Eachで使えるクラスを自作しようと勉強しています。
    備忘録として、自分なりにまとめてみたのですが、イマイチ自信がありません。
    内容的には、次のような理解で合っているのでしょうか?
    詳しい方、チェックして頂けませんでしょうか?


    For Each…Next対応コレクションを自作するために、IEnumerablelインターフェースを実装する方法についてまとめました。
    IEnumerableを実装がされていると、GetEnumerator()メソッドを実行するとコレクションを反復処理できる列挙子(IEnumeratorが実装されているインスタンス)が返ってくることが保証されるクラスとなります。(そのようにクラスを構築する義務があるということ)
    IEnumeratorを実装するということは、Currentプロパティ、MoveNext()メソッド、Reset()メソッドが実装されていることを指し、その方法には、連結リストを用いて独自に機能を実装する方法や、既に、IEnumeratorを実装しているArrayクラスやList(of T)クラスや、Yieldステートメントを用いて外部的に等価の機能的を実装する方法があります。

    IEnumeratorが実装されていると、Currentプロパティで、コレクション内の列挙子の現在位置にある要素が取得でき、MoveNext()メソッドを実行すると列挙子に次の要素があれば、Currentプロパティにその要素の参照を代入しTrueを返し、次の要素がなければFalseが返されることが保証されます。Reset()メソッドは、列挙子を初期位置(コレクションの最初の要素の前:一般的にはNotihing)に設定します。即ち、反復処理を行うには、MoveNext()メソッドを実行してからCurrentプロパティで取得することを繰り返す必要があります。
    具体例として、ArrayクラスがIEnumerableインターフェースを実装していることを確認するためのコードを示します。
    (Windowsフォームにボタンを4つ配置)
    Public Class Form1
    Dim TestArray As Array
    Dim TestArrayEnumerator As IEnumerator
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    '初期化
    TestArray = {1, 3, 5, 7, 9}
    TestArrayEnumerator = TestArray.GetEnumerator
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'Current
    MsgBox(TestArrayEnumerator.Current)
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    'MoveNext
    TestArrayEnumerator.MoveNext()
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    'Reset
    TestArrayEnumerator.Reset()
    End Sub
    End Class
    ポイントとしては、MoveNext()メソッドを呼び出さなければ、Currentプロパティに値が設定されないという点です。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■33960 / ResNo.1)  Re[1]: IEnumerableについてまとめてみました。
□投稿者/ 魔界の仮面弁士 大御所(1141回)-(2018/08/14(Tue) 04:21:22)
  • アイコンNo33959に返信(いちごさんの記事)
    > IEnumerablelインターフェースを実装する方法についてまとめました。
    「IEnumerablel」ではなく
    「IEnumerable」ですね。もしくは IEnumerable(Of ) でも良いですが。


    > IEnumerableを実装がされていると、GetEnumerator()メソッドを実行すると
    > コレクションを反復処理できる列挙子(IEnumeratorが実装されているインスタンス)が
    > 返ってくることが保証されるクラスとなります。
    その通りです。さらに補足するならば、
    『IEnumerable インターフェイス の GetEnumerator』メソッドさえ実装されていれば、
    そのクラス(または構造体)自身には、GetEnumerator という名のメソッドが無くても構いません。


    Public Class Form1
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each o As Object In CType(Nothing, Sample1)
          MsgBox(o)
        Next
        For Each o As Object In New Sample2()
          MsgBox(o)
        Next
      End Sub
    End Class

    Public Structure Sample1 'クラスでも構造体でも構わない
      Implements IEnumerable 'IEnumerable または IEnumerable(Of ) の実装が必要

      '実装時のメソッド名は GetEnumerator でなくても良いし、
      'Public である必要もない
      Private Function Ichigo() As IEnumerator Implements IEnumerable.GetEnumerator
        '返却値は「IEnumerator インターフェイス」を
        '実装したクラス(または構造体)でなければならない
        Return "test".ToCharArray().GetEnumerator()
      End Function
    End Structure


    Public Class Sample2
      Implements IEnumerable
      'VB11(VB2012) や C#2.0(C#2005)以上であれば、IEnumerator を持つクラスを
      '用意する代わりに、イテレーター構文を使って簡単に列挙値を返却できる
      Private Iterator Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
        Yield Now
        Yield True
        Yield "String Data"
        Yield 12345
        Yield 12345.67
        Yield 123.456D
      End Function
    End Class




    > IEnumeratorを実装するということは、
    > Currentプロパティ、MoveNext()メソッド、Reset()メソッドが実装されていることを指し、
    > その方法には、連結リストを用いて独自に機能を実装する方法や、
    > 既に、IEnumeratorを実装しているArrayクラスやList(of T)クラスや、
    > Yieldステートメントを用いて外部的に等価の機能的を実装する方法があります。

    そうですね。


    > IEnumeratorが実装されていると、Currentプロパティで、
    > コレクション内の列挙子の現在位置にある要素が取得でき、
    > MoveNext()メソッドを実行すると列挙子に次の要素があれば、
    > Currentプロパティにその要素の参照を代入しTrueを返し、
    > 次の要素がなければFalseが返されることが保証されます。

    そうですね。そして Current と MoveNext の実装は必須です。


    > Reset()メソッドは、列挙子を初期位置(コレクションの最初の要素の前:一般的にはNotihing)に設定します。

    一方で、Reset 動作は必須では無いため、ただの空実装になっていたり、
    単に Throw New NotSupportedException() するだけの実装で済まされることもしばしばあります。


    > 即ち、反復処理を行うには、MoveNext()メソッドを実行してからCurrentプロパティで取得することを繰り返す必要があります。
    > ポイントとしては、MoveNext()メソッドを呼び出さなければ、Currentプロパティに値が設定されないという点です。

    提示頂いたコードだと、MoveNext せずに Current が呼ばれるとエラーになりますね。
    ただ、すべての実装がそうなっているというわけではありません。


    Current を呼ぶ前には、事前に MoveNext を呼び出すルールにはなっていますが、
    MoveNext せずに Current を呼び出した場合の動作は実装依存だったりします。

    事前に MoveNext していないと例外を発生させる実装になっていることもあれば、
    いきなり Current を呼び出しても例外にはならず、単に Nothing を返す物もありますし、
    中には、初回の MoveNext が呼ばれていなければ内部で MoveNext してくれる実装もあります。



    Imports System.Runtime.InteropServices

    Public Class Form1
      Private rs As Object
      Private TestArrayEnumerator As IEnumerator
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        rs = CreateObject("ADODB.Recordset")
        Dim fs As Object = rs.Fields
        fs.Append("Col1Int", 3)
        fs.Append("Col2Str", 202, 4)

        rs.Open()
        rs.AddNew(New Object() {"Col1Int", "Col2Str"}, New Object() {100, "ABCD"})
        rs.AddNew(New Object() {"Col1Int", "Col2Str"}, New Object() {200, "EFGH"})
        rs.AddNew(New Object() {"Col1Int", "Col2Str"}, New Object() {300, "IJKL"})
        rs.Update()
        rs.MoveFirst()

        'Dim eo As Object = CallByName(fs, "[DispId=-4]", CallType.Get)
        Dim eo As Object = fs._NewEnum
        TestArrayEnumerator = DirectCast(eo, ICustomAdapter).GetUnderlyingObject()
      End Sub

      Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'Current
        Dim o As Object = TestArrayEnumerator.Current
        If o Is Nothing Then
          MsgBox("(Nothing)")
        Else
          MsgBox(o.Name & "=" & o.Value)
        End If
      End Sub

      Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        'MoveNext
        MsgBox("MoveNext() : " & TestArrayEnumerator.MoveNext())
      End Sub

      Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        'Reset
        TestArrayEnumerator.Reset()
      End Sub
    End Class
違反を報告
引用返信
■33961 / ResNo.2)  Re[2]: IEnumerableについてまとめてみました。
□投稿者/ いちご 一般人(6回)-(2018/08/14(Tue) 11:05:55)
  • アイコンご丁寧な回答ありがとうございます。大変、勉強になりました。教えていただいたことを踏まえて、備忘録を修正しました。コードは、前回のままで記録したいと考えています。本当にありがとうございました。


    IEnumerableを実装したクラスは、GetEnumerator()メソッドを実行することによりコレクションを反復処理できる列挙子(IEnumeratorを実装したインスタンス)が返ってくることを保証します。(そのようにクラスを構築する義務がある)厳密にいうと、列挙士を返すメソッド名は、GetEnumeratorである必要がなく、Implementsキーワードでインターフェース名.メソッド名(IEnumerable.GetEnumerator)を指定したメソッドがあればクラスでも構造体でも問題ありません。また、Private属性を付けても For Each…Next文は、内部的に呼び出して問題なく機能します。
    IEnumeratorを実装すると、Currentプロパティ、MoveNext()メソッド、Reset()メソッドの実装が強要されますが、For Each…Next対応コレクションという点でみると、For Each…Next構文では使用されないが無いとエラーとなるReset()メソッドは、空実装やThrow New NotSupportedException()を返すだけのメソッドとする場合があります。Currentプロパティ、MoveNext()メソッドの実装方法には、連結リストを用いて独自に機能を組込む方法、既に、IEnumeratorを実装しているArrayクラスやList(of T)クラスを用いる方法、Yieldステートメントを用いて外部的に等価な機能を実現する方法があります。

    Currentプロパティには、コレクション内の列挙子の現在位置にある要素が取得でる機能を、MoveNext()メソッドには、列挙子に次の要素があれば、Currentプロパティにその要素の参照を代入た上でTrueを返し、次の要素がなければFalseを返す機能が求められます。MoveNext()メソッドを実行して次の要素があることを確認した上で、Currentプロパティで要素を取得することが、基本的なルールとなります。
    If (IEnumeratorを実装したインスタンス).MoveNext Then
    Currentを実行
    End If
    一方、Reset()メソッドは、列挙子を初期位置に設定する機能が求められますが、前述のMoveNextメソッドとCurrentプロパティの関係から、コレクションの最初の要素の前を初期位置とする必要があります。(一般的にはNotihing)何故ならば、列挙士の先頭を代入すると、MoveNext()メソッドを実行した段階で、2番目の要素を取り出すことになってしまうからです。

    具体例として、Arrayクラスを用いた、標準のIEnumerableインターフェース実装の動作を確認するためのコードを示します。初期化直後にMoveNextを実行する前に、Currentで取得をすると、'列挙は開始していません。MoveNext を呼び出してください。'とエラーが発生し、MoveNextがFalseを返しているのに、Currentで取得しようとすると、'列挙は既に完了しています。'のエラーが発生します。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■33955 / 親記事)  Windows標準TCPIPポートについて
□投稿者/ 福ちゃん 一般人(1回)-(2018/08/09(Thu) 12:48:18)
  • アイコン
    分類:[その他] 

    Windows標準TCPIPポートでのWindowSizeに関する質問
    PC側:
    OS:windows7 
    ドライバ:V3仕様
    ポート:windows標準TCPIP
    プロトコル:RAW
    Printer側:
    Ethernet,TCPIPスタックハード構成のIC実装。
    WindowSize Optionなし

    PC側の標準TCPIPポートの初期WindowSizeは、64240Bytesになってますが、Printer側は、データ受信毎にWindowSize更新のため1Byteダミーデータを返す必要があります。
    標準TCPIPポートWindowSizeは、ダーミデータ受信毎に−1されるために、64240回のデータ転送と制限されしまいます。

    転送回数の制限をなくす方法は、あるでしょうか。?

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■33956 / ResNo.1)  Re[1]: Windows標準TCPIPポートについて
□投稿者/ Hongliang 大御所(543回)-(2018/08/10(Fri) 13:38:53)
  • アイコンプリンタとの間での通信については詳しくないですが、TCP一般の話として。

    > Printer側は、データ受信毎にWindowSize更新のため1Byteダミーデータを返す必要があります。
    これはPC側から送信されたパケットに対するACKパケットだと思いますが、通常、ACKパケットはTCPヘッダのみでTCPペイロードを持たないパケットです。
    プリンタ側の実装を変更できるのであれば、ダミーデータというのを除いてみては。
違反を報告
引用返信
■33957 / ResNo.2)  Re[2]: Windows標準TCPIPポートについて
□投稿者/ 福ちゃん 一般人(2回)-(2018/08/10(Fri) 15:39:58)
  • アイコン Hongliang 様
    メールありがとうございます。
    > プリンタ側の実装を変更できるのであれば、ダミーデータというのを除いてみては。
    ダミーデータを転送しないとPrinter側Wウィンドウサイズが更新されずウィンドウゼロが発生してエラーとなります。





違反を報告
引用返信
■33958 / ResNo.3)  Re[3]: Windows標準TCPIPポートについて
□投稿者/ Hongliang 大御所(544回)-(2018/08/10(Fri) 16:37:25)
  • アイコン> ダミーデータを転送しないと
    これはひょっとして、プリンタ上のプログラムでプリントデータを受け取る部分でのsocket()やsend()レベルの話でしょうか。

    socket(,,IPPROTO_TCP)で作ったソケットの場合、ACKパケットは、それよりも下層のレベルでプログラマが関知することなく自動的に送信されるものです。
    疑うべきはICで実装されているというTCP/IPスタックでは。
    (どこからどこまでがどこにどう実装されているかわからないので推測ですが)
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▲上のスレッド
■33946 / 親記事)  スレッドのwebbrowserでDocumentCompletedが来ない
□投稿者/ 猫まっしぐら 一般人(3回)-(2018/08/03(Fri) 19:14:34)
  • アイコン環境/言語:[Windows7 VB.net2005] 
    分類:[.NET] 

    いつもお世話になっています
    
    ThreadWB = New Thread(New ThreadStart(AddressOf WBThread))
    ThreadWB.SetApartmentState(ApartmentState.STA)
    
    なスレッドの中で
    
    Private Sub WBThread()
        Do
            ' ここでキューを待機している
            Do While QWB.Count > 0
                RqsUrl = QWB.Dequeue
                If RqsURL <> "" AndAlso RqsURL <> "about:blank" Then
                    Using WB As New WebBrowser
                        WB.Visible = False
                        WB.ScriptErrorsSuppressed = True
                        AddHandler WB.DocumentCompleted, AddressOf WB_DocumentCompleted
                        Tim_WB.Start() ' このタイマーは処理終了のため
                        WB.Navigate(New Uri(RqsURL))
                        ' DummyLoop
                        For i As Integer = 0 To 100
                            Threading.Thread.Sleep(100)
                            Application.DoEvents()
                        Next
                        ' DummyLoopEnd
                        ' ここでタイマーからの終了の合図を待つ
                    End Using
                    System.GC.Collect()
                End If
            Loop
        Loop
    End Sub
    
    とやっているのですがこのダミーループ部分が無いとDocumentCompletedが発生しません
    Application.DoEvents無しでThread.Sleepだけでも発生しません
    10000回程ループを回せばApplication.DoEventsだけでも発生します
    なのでなるだけ少ないループで確実に発生させるためにこのような形になりました
    要はこのダミーループが回っているうちにDocumentCompletedが発生しないといけないようです
    
    Application.DoEventsはできれば使いたくないのですが他に何か方法はありますでしょうか
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■33947 / ResNo.1)  Re[1]: スレッドのwebbrowserでDocumentCompletedが来ない
□投稿者/ Azulean 大御所(503回)-(2018/08/03(Fri) 22:38:54)
  • アイコンNo33946に返信(猫まっしぐらさんの記事)
    > このダミーループ部分が無いとDocumentCompletedが発生しません
    > Application.DoEvents無しでThread.Sleepだけでも発生しません

    WebBrowser はそれが属するスレッドでメッセージループが必要なコントロールです。
    Sleep だけだと誰もメッセージを処理しなくなるので、いつまで経っても完了しなくなります。

    > Application.DoEventsはできれば使いたくないのですが他に何か方法はありますでしょうか

    スレッドで作るのをやめるしかないと思われます。

    スレッドで WebBrowser コントロールのインスタンスを作成している背景・理由を明示してもらった方が有益な助言につながる可能性があります。
違反を報告
引用返信
■33948 / ResNo.2)  Re[2]: スレッドのwebbrowserでDocumentCompletedが来ない
□投稿者/ 猫まっしぐら 一般人(4回)-(2018/08/03(Fri) 23:50:51)
  • アイコンNo33947に返信(Azuleanさんの記事)
    返信ありがとうございます

    > WebBrowser はそれが属するスレッドでメッセージループが必要なコントロールです。
    > Sleep だけだと誰もメッセージを処理しなくなるので、いつまで経っても完了しなくなります。

    そういうことだったんですね

    > スレッドで WebBrowser コントロールのインスタンスを作成している背景・理由を明示してもらった方が有益な助言につながる可能性があります。

    スレッドにしているのは必要な時に随時インスタンスを生成、廃棄するためです
    (ループの中でキューで生成の合図を待ちタイマーで廃棄しています)

    廃棄するのはWebBrowserを使わない時には20MB程度のメモリ使用量なのですが
    使うと100-200MBにもなってしまうため、使い終わったらDisposeするために
    このような構成になりました

    …と思っていましたがスレッドの生成コストを嫌って使いまわしする癖がついてましたが
    この場合は(1時間に1回程度なので)都度スレッド使い捨ててもいいんですねえ…
    というかループ必要ないならスレッドにする必要も無いのかな?
    確認してみます

    ありがとうございました
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]






Mode/  Pass/


- Child Tree -

2018/08/18(Sat) 13:02:22 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする