問題タブ [tcp-ip]
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.
java - サーバーがなくなったときにTCP接続を強制的に切断する
私のアプリケーションは、Jerseyを使用してループ内の別のサーバーへのHTTPロングポールを実行します。30秒以内に戻るのはサーバーに依存しています。問題は、サーバーが停止し、別のIPアドレスで別のサーバーに置き換えられることがあることです。これにより、最後のHTTP呼び出しが返されることもタイムアウトになることもありません。そのため、アプリケーションを再起動するまで、アプリケーションのポーリングループがスタックします。
アプリケーションにHTTP呼び出しを中断するか、サーバーがなくなったことを検出するように強制するにはどうすればよいですか?これは、Jerseyクライアントを使用するJavaアプリケーションです。
c - cのソケットを使用した再接続
cでソケットを使用していて、send/recvで成功しました。ただし、問題は、サーバーがクラッシュしたときに、クライアントがサーバーに再接続する必要があることです (サーバーはしばらくすると実行されます)。だからここで私がしたこと:
- ソケットを作成する
- 接続
- 受信/送信
- recv サイズ == 0 の場合は、ステップ 2 に進みます。
このアルゴリズムは私には機能しません。何かアイデアはありますか?
コード:
c - OpenSSL を使用した Web サーバー
Web サーバーをコンパイルしようとしましたが、以下のようなことが起こりました。
ここで何が悪いのか誰にもわかりますか?
sockets - イーサネット経由で 2 つの組み込みデバイス間で通信するにはどうすればよいですか?
私はこのテーマの専門家ではありません。あなたの提案が必要です。イーサネット/LAN 上にいくつかのデバイスがあります。私は、これらのデバイスがネットワーク構成に入ることなく、LAN 経由で通信できるようにしたいと考えていました。以下は私の計画です。これが達成可能かどうか教えてください。
1) これらのデバイスに TCP/IP スタックをインストールします
2) デバイス 1、デバイス 2 などのホスト名を付けます。
3) これらのデバイスをローカル リンク ネットワーキング用に構成して、デバイス自体を構成し、IP を取得できるようにします。
4) ソケット プログラミングを使用し、ホスト名を使用して各デバイスにアクセスします。
これがあまり手間をかけずにできるかどうか、また、上記の点で何か見逃しているかどうかをお知らせください。前もって感謝します。
c# - C# のファイル転送プログラムは、画像や開くことができないバイナリ ファイルにアーティファクトを残す
テキストファイルは問題ないようです。ファイルを送信するために使用されるコードは次のとおりです。
ファイルを受け取るコードは非常によく似ています。
画像アーティファクトに関する多くの投稿を見てきましたが、すべての問題はバイトがテキストにエンコードされることに対処していました。私はその問題を回避したと信じています。プロセス全体でバイト配列を使用し、読み取られているバイト数を追跡していますが、それでも画像は破損してしまいます。ファイルを確認したところ、クライアントとサーバーでまったく同じバイト数が含まれているため、サーバーで何かが起こっていますが、正しくありません。コードに何か問題がありますか、それともサーバーの問題でしょうか?
android - Android TCP/IP ソケット通信がデータを返さない
私は現在、雇用主の既存の製品にリンクする Android アプリに取り組んでいます。システムは、.NET Windows プログラム、直接シリアル通信、または制御 Web ページを使用して、シリアル、イーサネット、または Wi-Fi 経由で制御可能なファームウェアを実行するデバイスです。Android アプリは、制御 Web ページに自動接続するためのものであり、IP アドレスを手動で見つける必要なく、電話からデバイスを制御できます。そのためには、IP アドレスを見つけて、そのアドレスがこれらのファームウェア デバイスのいずれかに対応しているかどうかを判断できる必要があります。
基本的に、私がやりたいことは、Android が認識し、それぞれを上記のメソッドに送信するすべての IP アドレスを実行することです。この Thing は、ファームウェア コマンドでアドレスに ping を実行し、何が返されたかを確認して、アドレスがファームウェア デバイスに対応しているかどうかを判断します。現時点では、「HOME」や「GETINFO」などのコマンド (もちろん、ファームウェア用に正しくフォーマットされています) を送信し、何かが返された場合に期待される応答と比較することで、これを行っています。home のようなコマンドには、物理的な応答を引き起こすという利点もあります。そのため、少なくともコマンドが受信されたかどうかは、マイクロチップ デバッガーがなくてもわかります。
現状では、正しいアドレスがハードコーディングされており、このメソッドに送信されています。アプリは URL と同じアドレスを使用して Web ページ コントロールを正常に読み込むことができることを知っているため、アドレスが正しく、接続が良好である必要がありますが、デバイスへの直接通信が機能していません。物理的な応答は観察されず、情報は返されません。入力ストリームはタイムアウトして -1 を返します。これについて私がひどく困惑しているのは、私が知る限り、.NET Windows コントロールとまったく同じ方法で情報を送信しているにもかかわらず、それが機能していないことです。
もう 1 つ注意: IP アドレス文字列をソケット コンストラクターにホスト名として送信してもおそらくうまくいかないことは承知していますが、UnknownHostException がスローされないため、ソケットがそれを IP アドレスに解決できることはわかっています。正しい?
私のコードは次のとおりです。
あなたが与えることができるどんな助けにも感謝します, 本当に感謝します!
java - マシンの tcp バッファ サイズを監視する
私はTCPベースのクライアントサーバーのJavaアプリをプロファイリングする必要があり、その一部はTCPの送信および受信バッファーのサイズを監視することです(実行中のアプリのVisualVMを使用してメモリとスレッドを監視するなど、メッセージが流れるとリアルタイムで) . これに最適な方法/ツールは何ですか?
c# - TCP/IP からの読み取りループ
サーバーに (IP とポートを使用して) 接続し、サーバーからメッセージを XML として取得する読み取りループを作成する必要があります。サーバーからのメッセージがない場合があります。
接続を作成して(正常に動作します)メッセージを読み取ろうとしましたが、サーバーから最初のメッセージを取得し、別のメッセージを読み取ろうとするとスタックします。今はメッセージがないのではないかと思いますが、メッセージが出るまでループを続ける必要があります...「catch」や「finally」にも行かず、何もしません..
windows - Windows アプリケーションでの不規則なソケット エラー (10054)
イントラネット内の異なるホストで実行されている複数のプロセスを使用する Windows (Microsoft Visual C++ 2005) アプリケーションで作業しています。
プロセスは、TCP/IP を使用して相互に通信します。異なるプロセスは、同じホスト上または異なるホスト上にあります (つまり、通信は同じホスト内または異なるホスト間で行うことができます)。
現在、不定期に発生するバグがあります。通信はしばらく機能しているように見えますが、その後機能しなくなります。その後、しばらくすると再び機能します。
通信が機能しない場合、エラーが発生します (明らかに、プロセスがデータを送信しようとしている間)。呼び出しは次のようになります。
取得したエラーコードを調べることで
エラー 10054 であることがわかります。これは、Microsoft のドキュメントで見つけたものです (こちらを参照)。
したがって、私が理解している限り、接続は受信プロセスによって中断されました。場合によっては、このエラーは (私の知る限り) 正しいものです。1 つのプロセスが終了したため、到達できません。それ以外の場合、送信側と受信側の両方が実行され、アクティビティをログに記録していますが、上記のエラーが原因で通信できません (エラーはログに報告されます)。
私の質問。
- SO_LINGER オプションの意味は何ですか?
- キープアライブ アクティビティとは何ですか? また、どのように接続を切断することができますか?
- この問題を回避または回復するにはどうすればよいですか?
最後の質問について。私たちが最初に試した解決策 (実際には回避策です) は、エラーが発生したときにメッセージを再送信することでした。残念ながら、しばらくの間(数分間)同じエラーが何度も発生します。したがって、これは解決策ではありません。
現時点では、ソフトウェアに問題があるのか、構成に問題があるのかわかりません。Windows レジストリで何かを確認する必要があるのではないでしょうか?
1 つの仮説は、OS がエフェメラル ポートを使い果たす (接続が閉じられているが、TcpTimedWaitDelay のためにポートが解放されていない場合) というものでしたが、この問題を分析することで、多くのポートがあるはずだと考えています。プロセス間で頻繁に送信されます。ただし、これを除外できるかどうかはまだ 100% 確信が持てません: エフェメラル ポートが何らかの方法で失われる可能性はありますか (???)
役立つかもしれないもう 1 つの詳細は、送信と受信が別々のスレッドで同時に各プロセスで発生することです。TCP/IP ライブラリに破損する可能性のある共有データ構造はありますか?
非常に奇妙なのは、問題が不規則に発生することです。通信は数分間正常に機能し、その後数分間機能しなくなり、その後再び機能します。
アイデアや提案をありがとう。
編集
考えられる唯一の説明が接続の閉じられたエラーであることを確認するヒントをありがとう。問題をさらに分析したところ、接続のサーバー側プロセスがクラッシュしたか、終了して再起動されたことがわかりました。そのため、新しいサーバー プロセスが実行され、正しいポートでリッスンしていましたが、クライアントはこれを検出せず、まだ古い接続を使用しようとしていました。このような状況を検出し、クライアント側で接続をリセットするメカニズムが用意されました。
java - TCP/IP接続をローカルでテストする
現在、IPアドレスとポートを使用してTCP/IP経由でターミナルサーバーに接続するアプリケーションがあります。ラップトップでローカルにモックTCP/IP接続を作成して、アプリケーションをラップトップの特定のIPおよびポートに接続できるようにすることはできますか?
私はネットワーキングの初心者ですので、質問が明確でない場合は実行してください。
私がこれを行おうとしている理由は、アプリケーションがターミナルサーバーのTCP / IP接続で特定のポートをリッスンしていて、VBマクロを使用して同じポートにデータをリモートで送信しているためです。ターミナルサーバーがない場合(ラップトップを使用している場合)に同じものをローカルでテストしたいのですが、アプリケーションを実行すると、TCP/IP接続を使用してのみ接続できます。
アプリケーションはJavaで記述されており、接続するIPアドレスとポートを指定することでローカルで実行できるため、アプリケーションをTCP/IP接続としてラップトップに接続できるかどうかを確認したいと思います。
任意の入力をいただければ幸いです。