問題タブ [sendto]
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.
windows - Perl スクリプトと Windows の SendTo で 20 を超えるファイルを使用できないのはなぜですか?
Windows Vista Ultimate 64 ビットでファイル名内の crc32 値をチェックする RapidCRC の機能をエミュレートしようとしています。ただし、ある種の引数の制限に遭遇しているようです。
簡単な Perl スクリプトを作成し、それを呼び出すバッチ ファイルを作成し、バッチ ファイルへのショートカットを%APPDATA%\Microsoft\Windows\SendTo
これは、約 20 個以下のファイルを選択し、右クリックしてバッチ ファイル スクリプトに「送信」するとうまく機能します。ただし、それ以上を選択しても何も起こりません。文字または引数の数の制限がどこかにあると思われます。
うまくいけば、単純なものが欠けていて、解決策や回避策がそれほど苦痛ではないことを願っています.
参考文献:
バッチ ファイル (crc32_inline.bat):
パールノート:
私は(イチゴ)perl v5.10.0を使用しています
パスに C:\strawberry\perl\bin があり、そこに crc32.bat が存在します。
perl スクリプト (crc32_inline.pl):
c - Cウィンドウsendto()
次のコードを使用してUDPを送信しようとしていますが、奇妙な結果が得られます。
ただし、totalLength変数が30に設定されている場合、sendto関数は実際には2292556を返しますが、少なくとも30マーク付近で何かを返す必要はありませんか?sendtoを使用する前にtotalLength変数を確認しましたが、同意した値が返されますが、sendtoは大量の値を返します。全長が実際のバッファサイズより大きくなることはありません。
WSAGetLastErrorは0を返しています。
ありがとう。
c - sendto() がエラー コード "Success" でクラッシュする
私の問題は、実際には非常に腹立たしいものです。最初にコードを示します。
ずさんなコードを許してください。私は必死にこの任務を時間通りに終わらせようとしています。目標は、データグラム ソケットを使用して ARQ プロトコルを開発することです。このコードは機能するはずですが、実行するとエラーが発生します。これは、呼び出しが失敗したsendto: Success
ことを意味します。sendto()
これに関するドキュメントがどこにも見つからず、非常に必死になっています。
c - UDP ソケットを使用した複数の sendto()
UDP を使用して同じプログラムの他のインスタンスと通信するネットワーク ソフトウェアがあります。さまざまな理由から、ここでは UDP を使用する必要があります。
最近、UDP 経由で大量のデータを送信する際に問題が発生し、メッセージを小さなデータ チャンクに分割するための断片化システムを実装する必要がありました。これまでのところうまくいきましたが、大量のデータ チャンクを送信する必要があるときに問題が発生しました。
私は次のアルゴリズムを持っています:
- メッセージを小さなデータ チャンク (約 1500 バイト) に分割します。
- データ チャンク リストを反復処理し、それぞれについて、次を使用して送信します。
sendto()
しかし、大量のデータ チャンクを送信すると、受信者は最初の 6 つのメッセージしか取得しません。6 番目を逃して 7 番目を受け取ることもあります。場合によります。
とにかく、sendto()
常に成功を示します。これは、ループバック インターフェイス (127.0.0.1) 経由でソフトウェアをテストすると常に発生しますが、LAN ネットワーク経由では発生しません。
std::cout << "test" << std::endl;
間に何かを追加するとsendto()
、すべてのフレームが受信されます。
UDP ではパケット損失が許容されることと、多くの理由でフレームが損失する可能性があることを認識しています。これは、データ チャンクを送信する速度に関係していると思います。
ここで正しいアプローチは何でしょうか?
- 何らかの確認応答メカニズム (TCP など) を実装するのはやり過ぎのようです。
- 間に任意の待機時間を追加するの
sendto()
は見苦しく、おそらくパフォーマンスが低下します。 - (可能であれば) 受信機の UDP 内部バッファーを増やしますか? これが可能かどうかさえわかりません。
- 他の何か?
ここであなたのアドバイスが本当に必要です。
ありがとうございました。
要求に応じた追加情報
UDP を使用しなければならない理由は、いくつかの制約があるためです。
- TCP は NAT トラバーサルでうまく機能しません(少なくとも特定の構成がなければ)
- 一部のメッセージが失われる可能性があります。できない人もいます。
- メッセージの配信順序は重要ではありません。
c# - SendToメニューとシングルインスタンスプログラム
「送信先」を右クリックするだけでFTPサーバーにファイルを送信できるプログラムを作成しています。問題は、[送信]をクリックするたびに新しいexeファイルが開き、別のプログラムとして機能することです。すでに開いているプログラムでファイルを送信するようにする必要があります。
ありがとうございました。
visual-studio-2008 - VS 2008 で作成されたショートカットが [送信先] メニューに表示されない
Visual Studio 2008 を使用して構築された WinForms アプリケーションがあります。セットアップ プロジェクトをソリューションに追加して、インストール MSI ファイルを作成しました。ユーザーの [送信] メニューでアプリケーションの実行可能ファイルを指すショートカットを作成するには、セットアップ プロジェクトが必要です。このようにして、誰かがファイルを右クリックすると、アプリケーションが [送信先] リストに表示され、選択されます。
Setup プロジェクトのファイル システム設定で、Users Send To メニューにショートカットを追加する方法を見つけました。問題は、ファイルを右クリックしても、[送信] メニューにショートカットが表示されないことです。実行可能ファイルへのショートカットを手動で作成すると、アプリケーションは [送信先] メニューに表示されます。
これが機能するために必要なレジストリエントリについて、Web で多くの提案を読みました。それらを挿入する Ramesh Srinivasan によって書かれた VBS ファイルがあります。私がこれを試したすべてのシステムで、レジストリ値がすでに存在していたので、これは問題ではありません。それは、Visual Studio (またはとにかく msi) が作成しているショートカットにあるようです。
Windows XP と Windows 7 で同じ問題が発生しましたが、他の OS ではまだ試していません。
c - VPNでブロードキャストする場合、Csendtoは-1を返します
私はメッセージを頻繁にブロードキャストするudpサーバーを構築しました。問題なく放送します。しかし、VPNをオンにすると、INADDR_BROADCASTに送信している場合でも、sendtoは-1を返し始めます。
それが何かを変えるなら、私はこれをマックで実行しています。なぜこれが発生するのか本当にわかりません。UDPブロードキャストがどのように失敗するのでしょうか。
c# - SendToAsync メモリ リーク?
UDP サーバーとして機能する単純な .net 3.5sp1 Windows アプリケーション (C#) があります。ポートでリッスンし、エンドポイントからデータを受信し、受信したデータを別のエンドポイント (つまり、ライブ ブロードキャスト データ ストリームのリレー) に再送信します。私が経験しているのは、接続が約 20 分間アップした後、悪化し始めることです。また、毎秒約 50 ~ 100K のメモリを消費していることにも気付きましたが、これは GC 後に解放されることはありません。アプリを閉じて再起動する必要があります。良くない。問題を次のコードに絞り込みました。これにより、反対側に再送信されます。
SendToAsync でメモリ リークが発生した経験がある人はいますか?
アップデート:
ソケットが初期化されるときに、状態オブジェクトをインスタンス化します (一度だけ実行します)。状態オブジェクトには、バイト配列である「buffer」と呼ばれるプロパティがあります。次のようにソケットからデータを非同期に受け取ります。
そして、コールバック (ReceiveDataCB) で、非同期オブジェクトを取得し、バイト バッファーを別の関数に渡して処理します。これにより、上記のコードが呼び出され、反対側に再送信されます (state.buffer が readData になります)。 .
更新#2:
私の直感に従って、送信コードを次のように変更し、SocketAsyncEventArgs と SendToAsync を取り除きました。
そしてもちろん、EndSendTo を呼び出すだけの "echoCB" コールバックを追加しました。メモリリークがなくなりました!非常に多くの SocketAsyncEventArgs オブジェクトの作成と、これらにぶら下がっている非同期関数がパケットごとに 1 つ (1 秒あたり 33 パケットで、高速に加算される可能性があります) と関係があると思われます。SocketAsyncEventArgs の MSDN ドキュメントをもう一度見たところ、提供されたサーバーの「サンプル」コードで、SocketAsyncEventArgs オブジェクトのプールが使用されていることがわかりました。私が使っていたように機能するように設計されているとは思いません。要点は、呼び出しごとにこれらのバッファーなどをインスタンス化する必要がないため、それらを再利用してサーバーのパフォーマンスを向上させることだと思います。
sockets - 1つのソケットで十分なのはいつですか、さらに作成する必要があるのはいつですか?
UDPの「コネクションレス」の側面により、私はループに陥りました...
UDPソケットをINADDR_ANYに設定し、それをローカルマシンのポート33445にバインドすると、マシンはさまざまなクライアントからの着信接続を受け入れます。これはTCPではなく、各接続を直接処理するための新しい子ソケットを生成できないため、これらの接続はすべてその1つのソケットによって処理されます。これらの接続されたクライアントのいずれか、一部、またはすべてに、最新のメッセージから返信できます。
だから私にとって物事が少し曖昧になるところはここにあります...
これらのクライアントのいずれかにいつでもメッセージを送信できますか?または、recvfrom()に応答するメッセージのみを送信できますか?
これとは別に、そのサーバー(クライアントにサービスを提供している間)が別のサーバーに接続して他のことについて会話したい場合、この目的のために新しいソケットを作成する必要があると思いますか?既存のサーバーソケットを使用して新しい宛先アドレスを指定することはできませんか?
この素晴らしいコミュニティに感謝します。
編集:別の言い方をすれば、バインドされたソケットは、以前にそのソケットで私に到達したクライアントに応答するためにのみ使用できるようです。新しいホストとの会話を開始するために、バインドされたソケットをその目的に単純に使用することはできませんか?リッスンしているサーバーに到達するには、新しいソケットを作成する必要がありますよね?
java - Javaでは、Windowsのコンテキストメニューからファイル名を読み取るにはどうすればよいですか
私はここに新しく、Javaプログラミングでは、コンテキストメニューコマンドを取得し、ファイル名とそのフルパスを読み取るプログラムを作成しようとしています
たとえば、ファイルを右クリックしてコンテキスト メニューを表示し、任意のオプション (コピー、送信、または開く) を選択すると、プログラムがファイル名とそのフル パスを読み取るようにします。
今のところ、 text box を含むフォームがあり、コードはまだありません。
どのように開始すればよいか、または誰かがそれを支援するアイデアやコードを持っているかどうかを知りたい
どうもありがとう!