問題タブ [network-programming]

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 投票する
8 に答える
28753 参照

ruby - Ruby-ポートが開いているかどうかを確認します

特定のポートがRubyで開いているかどうかをすばやく確認する方法が必要です。私は現在これをいじっています:

ポートが開いている場合はうまく機能しますが、これの欠点は、たまに座って10〜20秒間待機し、最終的にタイムアウトしてETIMEOUT例外をスローすることです(ポートが閉じている場合)。したがって、私の質問は次のとおりです。

このコードを修正して1秒待つだけにすることはできますか(falseそれまでに何も返されない場合は戻ります)、または特定のホストで特定のポートが開いているかどうかを確認するためのより良い方法はありますか?

編集:私はRubyコードを好みますが、クロスプラットフォーム(Mac OS X、* nix、Cygwinなど)で動作する限り、bashコードの呼び出しも許容されます。

0 投票する
7 に答える
4042 参照

java - ネットワークプログラミング: ソケットを維持するかどうか?

私は現在、C# からネットワーク コンポーネントを持つ Java に API を翻訳しています。

C# バージョンは、そのクラスが使用されている間、入出力ストリームとソケットを開いたままにしているようです。

これは正しいです?

アプリケーションがコマンドを送信し、ユーザー入力に基づいてイベントを受信して​​いることを念頭に置いて、「メッセージ」ごとに新しいソケットストリームを開く方が賢明ですか?

サーバーがイベントをスローするのをリッスンするために ServerSocket を維持していますが、アウトバウンド通信用のソケットと出力ストリームを維持することが非常に良い考えであるかどうかはわかりません。

私はソケットプログラミングにあまり慣れていません。多くの開発者と同様に、私は通常、ネットワーキングを行う必要があるときはアプリケーション層で作業し、ソケット層では作業しません。大学でこの作業を行ってから 5、6 年が経ちました。

助けて乾杯。これは、決定的な答えを求めるというよりも、アドバイスを求めていると思います。

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

c# - ラインベースのネットワークI/Oストリームを処理するための良い方法は何ですか?

注:この質問の長さについてお詫び申し上げます。多くの情報を入力する必要がありました。それがあまりにも多くの人々が単にそれをすくい取って仮定をすることを引き起こさないことを願っています。全部お読みください。ありがとう。

ソケットを介して入ってくるデータのストリームがあります。このデータは行指向です。

.NET(BeginReadなど)のAPM(非同期プログラミング方式)を使用しています。非同期I/Oはバッファベースであるため、これによりストリームベースのI/Oを使用できなくなります。データを再パッケージ化してメモリストリームなどのストリームに送信することは可能ですが、そこにも問題があります。

問題は、私の入力ストリーム(私は制御できません)がストリームの長さに関する情報を私に提供しないことです。これは、次のような改行行のストリームです。

したがって、APMを使用すると、特定のデータセットの長さがわからないため、データのブロックがバッファの境界を越えて複数の読み取りが必要になる可能性がありますが、これらの複数の読み取りも複数のデータブロックにまたがります。

例:

私が最初に考えたのは、StringBuilderを使用して、SBにバッファー行を追加することでした。これはある程度は機能しますが、データのブロックを抽出するのは難しいことがわかりました。StringReaderを使用して新しい行のデータを読み取ろうとしましたが、StringReaderが最後に追加されたブロックの最後に部分的な行を返し、その後にnullを返すため、完全な行を取得しているかどうかを知る方法がありませんでした。返されたものが完全に新しいデータ行であったかどうかを知る方法はありません。

例:

さらに悪いことに、データに追加し続けると、バッファがどんどん大きくなり、これは一度に数週間または数か月実行される可能性があるため、適切なソリューションではありません。

私の次の考えは、データのブロックを読んでいるときにSBからデータのブロックを削除することでした。これには独自のReadLine関数を作成する必要がありましたが、読み取りと書き込み中にデータをロックするのに行き詰まりました。また、データのより大きなブロック(数百の読み取りとメガバイトのデータで構成される可能性があります)では、バッファー全体をスキャンして改行を探す必要があります。それは効率的ではなく、かなり醜いです。

非同期I/Oの便利さを備えたStreamReader/Writerのシンプルさを備えたものを探しています。

私の次の考えは、MemoryStreamを使用し、データのブロックをメモリストリームに書き込み、次にStreamReaderをストリームに接続してReadLineを使用することでしたが、バッファーでの最後の読み取りが完全な行であるかどうかを知ることに問題があります。さらに、ストリームから「古い」データを削除するのはさらに困難です。

また、同期読み取りでスレッドを使用することも考えました。これには、StreamReaderを使用すると、接続が切断された場合を除いて、ReadLine()から常にフルラインが返されるという利点があります。ただし、これには接続のキャンセルに関する問題があり、特定の種類のネットワークの問題により、ブロッキングソケットが長時間ハングする可能性があります。データ受信をブロックしているプログラムの存続期間中、スレッドを拘束したくないので、非同期IOを使用しています。

接続は長続きします。そして、データは時間の経過とともに流れ続けます。最初の接続中は大量のデータフローがあり、そのフローが完了すると、ソケットは開いたままになり、リアルタイムの更新を待機します。最初のフローがいつ「終了」したかは正確にはわかりません。これ以上データがすぐに送信されないことを知る唯一の方法だからです。これは、最初のデータの読み込みが完了するのを待ってから処理することができないことを意味します。処理が開始されると、「リアルタイム」で処理が滞ります。

それで、誰かがこの状況を過度に複雑にならない方法で処理するための良い方法を提案できますか?私はこれをできるだけシンプルでエレガントにしたいと思っていますが、すべてのエッジケースのために、ますます複雑なソリューションを考え続けています。私が欲しいのは、特定の基準(つまり、改行で終了する文字列)に一致するデータをポップすると同時に、より多くのデータを簡単に追加し続けることができる、ある種のFIFOだと思います。

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

tcp - キャプチャされたセッションで使用されるTCP輻輳制御アルゴリズムをフィンガープリントするためのアルゴリズムはありますか?

キャプチャされたTCPセッションで使用されるTCP輻輳制御アルゴリズムを決定するためのプログラムが欲しいのですが。

参照されているウィキペディアの記事には次のように記載されています。

TCP New Renoは最も一般的に実装されているアルゴリズムであり、SACKサポートは非​​常に一般的であり、Reno /NewRenoの拡張機能です。他のほとんどは、まだ評価が必要な競合する提案です。2.6.8以降、Linuxカーネルはデフォルトの実装をrenoからBICに切り替えました。2.6.19バージョンでは、デフォルトの実装が再びCUBICに変更されました。

また:

複合TCPは、公平性を損なうことなくLFNで良好なパフォーマンスを達成することを目的として、2つの異なる輻輳ウィンドウを同時に維持するTCPのMicrosoft実装です。これは、MicrosoftWindowsVistaおよびWindowsServer2008で広く展開されており、Linuxだけでなく古いMicrosoftWindowsバージョンにも移植されています。

どのCCアルゴリズムが使用されているかを判断するためのいくつかの戦略は何でしょうか(セッションをキャプチャするサードパーティから)?

アップデート

このプロジェクトは、これを行うためのツールを構築しました。

インターネットは最近、同種の輻輳制御から異種の輻輳制御へと進化しています。数年前、インターネットトラフィックは主に標準のTCP AIMDアルゴリズムによって制御されていましたが、インターネットトラフィックは現在、AIMD、BIC、CUBIC、CTCP、HSTCP、HTCP、HYBLA、ILLINOIS、LPなどのさまざまなTCP輻輳制御アルゴリズムによって制御されています。 STCP、VEGAS、VENO、WESTWOOD +、およびYEAH。ただし、異種輻輳制御を使用したインターネットのパフォーマンスと安定性の調査に関する作業はほとんどありません。基本的な理由の1つは、さまざまなTCPアルゴリズムの展開情報が不足していることです。このプロジェクトの目標は次のとおりです。

0 投票する
3 に答える
896 参照

java-me - j2me でバックグラウンド プロセスとしてデータをアップロードすることは可能ですか?

ネットワーク接続が悪い場合でも?

具体的には、HTTP POST 経由でファイルをアップロードしようとする別のスレッドを (UI から) 起動するコードを作成しました。ただし、接続が悪い場合、プロセッサは outputstream.close() または httpconnection.getheaderfield() またはネットワーク経由でデータを強制する読み取り/書き込みでスタックすることがわかりました。これにより、スレッドがスタックするだけでなく、プロセッサ全体が盗まれるため、ユーザー インターフェイスでさえ応答しなくなります。

スレッドの優先順位を下げようとしましたが、役に立ちませんでした。

私の理論では、この動作を回避する簡単な方法はありません。そのため、すべての j2me チュートリアルでは、すべてをバックグラウンド スレッドで送信するのではなく、「ネットワーク経由でデータを送信しています...」画面を作成するように開発者に指示しています。誰かが私が間違っていることを証明できれば、それは素晴らしいことです.

ありがとう!

0 投票する
4 に答える
309 参照

actionscript-3 - プロトコルの単純さと「適切さ」

私は友人と別の口論をしています。

当事者間である種のイベント (メッセージ) を送信するために基本的に使用される単純な JSON ベースのプロトコルを設計する必要があると考えてください。

言って、何か

私はこのプロトコルを上記のように維持することを提案しますが、私の友人は次のようなことを提案しています:

彼の主張は、TCP と HTTP が「責任」の異なる層にあるように、このプロトコルはデータを分離しておくために「詳細」サブオブジェクトを使用する必要があるというものです。

彼が持っているもう 1 つの議論は、一致したイベントを処理するハンドラーは、"ルーティング" 情報 (event_id など) について何も認識してはならないというものです。

私の主張は次のとおりです。

  1. この情報をハンドラーから隠すために、各メッセージ (およびネットワーク トラフィック。これは、大量のメッセージを交換するシステムにとって重要な場合があります) の長さを増やしています。
  2. ハンドラーは、適切に応答するために、実際には「ルーティング」情報を知る必要があります。

    /li>
  3. event_id などをハンドラーから隠す必要がある場合でも、ハンドラーに渡す前にそれらを取り除くだけで、トラフィックを節約できます。

このプロトコルは非常に単純で、他の人が使用することは想定されていません。

どう思いますか?

0 投票する
5 に答える
6056 参照

c++ - C++ (UDP または TCP) のネットワーク フレームワーク?

私はSDLOpenGLを使用してスレッド化されたクロスプラットフォーム アプリケーション (Linux/Windows) を作成しており、ネットワーキングを行うために、SDL_Net の上にあるSDL Net2 を検討していました。

ただし、これまで C/C++ でネットワークを作成したことがないため、利用可能なクロスプラットフォーム テクノロジに慣れていません。別のライブラリを提案するSDL_NetまたはNet2の経験がある人はいますか?

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

iphone - CFReadStreamHasBytesAvailableポーリング-ベストプラクティス

CFReadStream現在、を使用して新しいデータをポーリングしていCFReadStreamHasBytesAvailableます。

(最初に、いくつかの背景:私は独自のスレッド化を行っており、runloopのものを台無しにする必要はないので、クライアントコールバックのものは実際にはここでは適用されません)。

私の質問は:ポーリングのために受け入れられている慣行は何ですか?

この件に関するAppleのドキュメントはあまり役に立たないようです。

彼らは「あなたが待っている間に何か他のことをする」ことを勧めます。私は現在、次のようなことをしています。

usleepとはsched_yield「十分」ですか?そこに眠るのに「良い」数がありusleepますか?

(また:はい、これは私自身のスレッドで実行されているので、ブロックすることができますCFReadStreamRead-これは素晴らしいことですが、アップロードの進行状況とダウンロードの進行状況を妨害しようとしているので、そこでブロックしても役に立ちません... )。

どんな洞察も大歓迎です-ありがとう!

0 投票する
4 に答える
821 参照

c# - ソケット通信プログラムのテスト

いくつかのデータを送信するための単純なUDPClientプログラムを使用したソケットプログラミングから始めています。大きなコードスニペットは以下のとおりです。

サンプルはローカルマシンでは正常に機能しますが、イントラネット上の別のマシンにデータを送信することはできません。

テスト中

  • 彼のマシンにデータを送信するための適切なコードのコメントを解除しています
  • 彼のマシンでReceiverビットを実行しています
  • 必要なポートが彼のマシンで開いていることを確認しました

私は何かが足りないのですか?提案してください。