問題タブ [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.
c# - .net / c#ソケットプログラミングの優れたチュートリアル/ハウツーは何ですか
Winsockコントロールを使用する古いVB6コードをC#に移植しています。私はソケットプログラミングを行ったことがないので、誰かが私がスピードを上げるために使用できる良いリファレンス/チュートリアル/ハウツーを持っているかどうか疑問に思います。
一般的に非生産的なグーグルを進めている間、私は集合精神に訴えています。
現時点ではTCPではなくUDPを使用しています。
sockets - 信頼できる UDP が必要な場合、何を使用しますか?
TCP 接続が遅すぎる可能性があり、UDP '接続' の信頼性が低すぎる可能性がある場合、何を使用しますか? さまざまな標準の信頼できる UDP プロトコルがありますが、それらについてどのような経験がありますか?
返信ごとに 1 つのプロトコルについて話し合ってください。他の誰かがあなたが使用しているプロトコルについて既に言及している場合は、それらに投票し、必要に応じてコメントを使用して詳しく説明することを検討してください。
ここでのさまざまなオプションに興味があります。TCP はスケールの一方の端にあり、UDP はもう一方の端にあります。さまざまな信頼性の高い UDP オプションが利用可能で、それぞれが TCP のいくつかの要素を UDP にもたらします。
多くの場合、TCP が正しい選択であることはわかっていますが、代替案のリストを用意しておくと、その結論に達するのに役立つことがよくあります。Enet や RUDP などの UDP 上に構築されたものにはさまざまな長所と短所がありますが、それらを使用したことがありますか?
誤解を避けるために、これ以上の情報はありません。これは架空の質問であり、決定を下す必要がある人が利用できるさまざまなオプションと代替手段を詳述した回答のリストを引き出すことを望んでいました.
wcf - WCF を使用して非 .NET クライアント用の SOAP インターフェイスを公開する際の問題を知っている人はいますか?
WCF を使用して非 .NET クライアント用の SOAP インターフェイスを公開する際の問題を知っている人はいますか? たとえば、他の SOAP ライブラリとの非互換性は?
これは、サードパーティが当社のソフトウェアと統合できるように SOAP インターフェイスを公開できるようにするためです。
linux - SOCK_RAW ソケットを使用した TCP ハンドシェイク
わかりました、この状況がやや異常であることは認識していますが、生のソケット (C では Linux) のみを使用して TCP 接続 (3 ウェイ ハンドシェイク) を確立する必要があります。つまり、IP ヘッダーと TCP ヘッダーを自分で構築する必要があります。 . 私はサーバーを書いています (そのため、最初に着信 SYN パケットに応答する必要があります)、何らかの理由でそれを正しく行うことができないようです。はい、私は SOCK_STREAM がこれを処理することを理解していますが、私が入りたくない理由から、それはオプションではありません。
raw ソケットの使用に関するオンラインで見つけたチュートリアルはすべて SYN フラッダーを構築する方法を説明していますが、元のパケットに基づいて応答を構築する必要がないため、これは実際に TCP 接続を確立するよりもいくらか簡単です。SYNフラッダーのサンプルが動作するようになり、受信SYNパケットを生のソケットから問題なく読み取ることができますが、クライアントからの受信SYNに対する有効なSYN/ACK応答を作成するのにまだ問題があります.
それで、SYNフラッダーの作成を超えた生のソケットの使用に関する優れたチュートリアルを知っている人はいますか、またはこれを実行できるコードを持っている人はいますか(SOCK_STREAMではなくSOCK_RAWを使用)? 私は非常に感謝されます。
MarkR は完全に正しいです。問題は、カーネルがポートが閉じていると考えているため、初期パケットに応答してリセット パケットを送信していることです。カーネルは私を応答に打ち負かし、接続は切断されます。私はすでに接続を監視するために tcpdump を使用していました。もっと注意を払うべきだったのですが、2 つの応答があり、そのうちの 1 つは物事を台無しにしていたリセットであり、プログラムが作成した応答であることに気付きました。ドー!
MarkR で提案されているように、iptables ルールを使用してアウトバウンド パケットをブロックするのが最も効果的と思われる解決策です。ただし、提案されているように、マーク オプションを使用するよりも簡単な方法があります。リセット TCP フラグが設定されているかどうかを照合するだけです。通常の接続の過程でこれが必要になることはまずありません。また、使用中のポートからのすべてのアウトバウンド リセット パケットをブロックしても、アプリケーションにとっては問題になりません。これにより、カーネルの不要な応答が効果的にブロックされますが、自分のパケットはブロックされません。プログラムがリッスンしているポートが 9999 の場合、iptables ルールは次のようになります。
c - 低レベルの一般的なbsdソケットよりも低い
Cで低レベルのソケットをどのように実行しますか。例:実際にSYNを送信します。
network-programming - How do I send an ARP packet from a C program?
I'm working on an embedded linux system in C, I'm looking for the source code to the equivalet of SendARP in Windows. Any pointers?
security - SSL接続をどのようにテストしますか?
ネットワークアプリケーションでOpenSSLを試していますが、送信されたデータが暗号化されており、盗聴者に表示されないかどうかをテストしたいと思います。
確認するためにどのようなツールを使用できますか?これをプログラムで実行して、単体テストに配置できるようにすることはできますか?
c# - C# でのマルチスレッド ネットワーク サーバーのパターン
マルチスレッド サーバーを設計するために従うことができるテンプレート/パターン/ガイドはありますか? グーグル検索でオンラインで非常に役立つものを見つけることができません。
私のプログラムは、TcpListener を使用して接続をリッスンするスレッドを開始します。すべてのクライアント接続は、独自の IClientHandler スレッドによって処理されます。サーバーは clientHandler.HandleClient をデリゲートでラップし、BeginInvoke を呼び出してから、その処理を終了します。
また、リッスン スレッドをきれいにシャットダウンできるようにする必要もあります。これは、オンラインであまり見られないことです。
非同期の BeginAceptTcpClient および EndAcceptTcpClient と組み合わせたロック/AutoResetEvents/スレッド マジックの組み合わせがそこに到達すると想定していますが、ネットワーク コードに関しては、すべて完了しています。したがって、私が従うことができるいくつかのパターンがそこにあると信じなければなりません.そして、私が完璧にできるようには見えない無数のマルチスレッドのコーナーケースに完全に混乱することはありません.
ありがとう。
java - I / Oを試行せずに、TCPソケットがピアによって正常に閉じられたことを検出できないのはなぜですか?
最近の質問のフォローアップとして、Javaでは、TCPソケットで読み取り/書き込みを試行せずに、ソケットがピアによって正常に閉じられたことを検出できないのはなぜでしょうか。Socket
これは、pre-NIOとNIOのどちらを使用するかに関係なく当てはまるようSocketChannel
です。
ピアがTCP接続を正常に閉じると、接続の両側のTCPスタックがその事実を認識します。サーバー側(シャットダウンを開始する側)は状態FIN_WAIT2
になり、クライアント側(シャットダウンに明示的に応答しない側)は状態になりCLOSE_WAIT
ます。基盤となるTCP接続が終了したかどうかを確認するためにTCPスタックにクエリを実行できるSocket
メソッドがないのはなぜですか?SocketChannel
TCPスタックがそのようなステータス情報を提供しないということですか?それとも、カーネルへのコストのかかる呼び出しを回避するための設計上の決定ですか?
この質問に対する回答をすでに投稿しているユーザーの助けを借りて、問題がどこから来ているのかがわかると思います。接続を明示的に閉じない側は、最終的にTCP状態になりますCLOSE_WAIT
。つまり、接続はシャットダウンの過程にあり、側が独自のCLOSE
操作を発行するのを待ちます。isConnected
戻っtrue
たりisClosed
戻ったりするのは十分公平だと思いますfalse
が、なぜそのようなものがないのisClosing
ですか?
以下は、NIO以前のソケットを使用するテストクラスです。ただし、NIOを使用しても同じ結果が得られます。
テストクライアントがテストサーバーに接続すると、サーバーが接続のシャットダウンを開始した後でも、出力は変更されません。