問題タブ [transmitfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1408 参照

sockets - Win32 TransmitFile() を使用して 2,147,483,646 バイト (~2 GiB) を超えるファイルを転送するにはどうすればよいでしょうか?

TransmitFile の MSDN エントリから引用:

TransmitFile 関数の 1 回の呼び出しで送信できる最大バイト数は 2,147,483,646 で、32 ビット整数の最大値から 1 を引いた値です。1 回の呼び出しで送信する最大バイト数には、前後に送信されたデータが含まれます。 lpTransmitBuffers パラメーターが指すファイル データに、送信するファイル データの長さとして nNumberOfBytesToWrite パラメーターで指定された値を加えた値。アプリケーションが 2,147,483,646 バイトを超えるファイルを送信する必要がある場合、TransmitFile 関数への複数の呼び出しを使用して、各呼び出しが 2,147,483,646 バイトを超えないように転送できます。2,147,483,646 バイトを超えるファイルの nNumberOfBytesToWrite パラメータをゼロに設定しても失敗します。この場合、TransmitFile 関数はファイルのサイズを送信するバイト数の値として使用するためです。

大丈夫。TransmitFile を使用してサイズ2*2,147,483,646 bytes(~ 4 GiB) のファイルを送信するには、少なくとも 2 つの部分に分割する必要があります (たとえば、TransmitFile の 2 回の呼び出しで 2 GiB + 2 GiB)。しかし、その間に基礎となる TCP 接続を有効に保ちながら、それを行うにはどうすればよいでしょうか?

ファイルのサイズが実際に <=2,147,483,646 バイトの場合、次のように書くことができます。

Windows にすべての下位レベルのもの (キャッシュ、効率的な転送のためのデータのチャンク化など) を処理させるため。ただし、同等の Linux のsendfile()システムコールとは異なり、呼び出しにはすぐに明らかなオフセット引数はありません (ただし、5 番目の引数は、LPOVERLAPPED lpOverlappedおそらくまさに私が探しているものです。一緒に何かをハックできると思いますが、実際にこのことを知っている人からの優雅で優れたWin32ソリューションも探しています。

lpOverlapped パラメーターを使用して、OVERLAPPED 構造体の Offset および OffsetHigh メンバーを設定することにより、ファイル データ転送を開始するファイル内の 64 ビット オフセットを指定できます。lpOverlapped が NULL ポインターの場合、データの送信は常にファイル内の現在のバイト オフセットから開始されます。

では、ネット上ですぐに利用できる最小限の例がないため、そのようなタスクを達成するにはどの呼び出しが必要なのでしょうか?

0 投票する
1 に答える
755 参照

c++ - transmitFile() 関数を受信した後、recv が停止しない

クラスにWinsocketを使用して小さなサーバー/クライアントファイル転送を作成していますが、ファイルを受信して​​HDDに書き込んだ後、ソケットでメッセージを受信できないことを除いて、基本的に機能します。

送信コードは次のようになります。

サイズの代わりに 0 で試してみましたが、結果は同じでした。

サーバー側で受信するようになりました:

私が知る限り、ファイルの転送は正常に機能し(rar jpg .hを試しました)、

も元気に出ます。

しかし、その後の受信は私に何も与えませんか?または空の何か?recv もプログラムをブロックしないので、何か空だと思います。しかし、私がそれを与えるとき、「i」は0になります。

while(1) ループ内のもので何らかのエラーが発生したかどうかを確認するために、別の方法でファイルを受信しようとしました。

2回目の試行:

その後、同じ結果の recv を再度送信します。ファイルは機能しましたが、再度受信すると空のものが得られました。

では、なぜこれを修正できるのか、誰にでも教えてもらえますか? 可能であれば、可能な限り変更を最小限に抑えますか?

ありがとう、マーティン

編集:現在私のために働いているコード:

0 投票する
1 に答える
2856 参照

c# - TransmitFile が機能していません

私はファイルを持っています、そしてそれはフルパスです(そしてファイル名)はこの変数にあります:

そのファイルをクライアントにダウンロードしたい。

私はこれをします:

ボタンをクリックすると、このファイルが実行されますが、何もクライアントにダウンロードされません。クライアントのブラウザにファイルが表示されません。

私はどんな間違いをしましたか?

0 投票する
1 に答える
225 参照

linux - 暗号化/復号化を伴う sendfile() / TransmitFile()

暗号化も使用したい場合、sendfile() (Linux の場合) と TransmitFile() (Windows の場合) の利点を得るにはどうすればよいですか? この機能を提供する Linux カーネル モジュールまたは Windows ドライバーはありますか? これまでに見つけた唯一のものは、Netflix による FreeBSD での実装ですが、残念ながら、それは私の 2 つのターゲット プラットフォームではありません。

0 投票する
1 に答える
228 参照

c# - C#を使用してasp.netでファイルがダウンロードされた後、ファイルダウンロードのEnterキーイベントをキャンセルする方法

検索ボックスのあるページがあり、ユーザーがEnterキーを押すと検索がトリガーされます(Enterキーでこの検索をチェックしていIsPostBackます。検索が完了すると、ユーザーはファイルのリンクでダウンロードを押すことができます検索から表示されます。

問題は、ユーザーがリンクをクリックして検索ボックスに戻ると、Enter キーが再びファイルのダウンロードをトリガーすることです。

ファイルがダウンロードされた後にこのイベントをクリアするにはどうすればよいIsPostBackですか?

注: ファイルのダウンロードをトリガーするために、Gridview コントロールで Linkbutton コントロールを使用しています。

ファイルをダウンロードするためのコード:

0 投票する
2 に答える
366 参照

c# - コードがスレッド中止エラーをスローするのはなぜですか?

このコードを使用してファイルをダウンロードしていますが、エラーがスローされます。取り扱いを手伝ってください。

スレッドが中止されました。

0 投票する
0 に答える
54 参照

android - クラス オブジェクトを Activity からクラスに渡して、そのメソッドを呼び出せるようにするにはどうすればよいですか?

アクティビティでクラスobjectのを作成する必要があります。(インテントを介してオブジェクトを渡す) で実装しようとしましたが、そこからアプリケーションがクラッシュします。BLEonCreateParcel

結局のところ、その理由は、BLEクラスで受け入れたときの内容でした:

後で、Intent は onCreate 内でのみ、あるアクティビティから別のアクティビティにデータを転送する役割を果たすことを知りました。

作成したクラスのオブジェクトを他のクラス(アクティビティではない)に転送する方法を教えてください。事前に感謝します。