問題タブ [udpclient]
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.
.net - UDP 経由でリアルタイム データを送信するにはどうすればよいですか?
UDP を介して一連のビデオ フレームをできるだけ高速かつリアルタイムで送信する必要があり、基本的な作業を行う一方で、あらゆる種類の問題に直面しています。私の目標のいくつか:
通常、データはダイヤルアップ (TCP ではなく UDP) 経由で送信されますが、高速イーサネットもサポートする必要があります。
ときどきフレームをドロップしても問題ありません (したがって、TCP ではなく UDP)。
低遅延が必要です。リモートが受信するフレームは、最近送信されたものである必要があります (バッファ内で待機している数フレーム以下)。
フレームレートを維持するためにフレームを多かれ少なかれ圧縮できるように、有効な帯域幅を検出できる必要があります。
私はほとんどの部分を実装することができました:
フレーム データを約 500 バイトの 1 つまたは複数のデータグラムに分割し、それぞれにシーケンス番号とその他の情報を含めます。レシーバーはフレーム全体を再構築し、欠落しているデータグラムがないかどうかを検出します。
受信者が特定の割合を超えるフレームのドロップを検出した場合 (たとえば、最後の 10 フレームで 50%)、送信者に TCP メッセージを送信して速度を 50% 低下させます。送信者は、後続のフレームごとにゆっくりと速度を 5% 上げます。
System.Net.Sockets.UdpClient を使用してデータを送受信します。
送信者への制御メッセージに使用される別の TCP チャネルがあります。
現在の私の主な問題は、有効な帯域幅を検出し、特にダイヤルアップ (最大 ~4,000 バイト/秒) での遅延に対処することです。たとえば、TcpClient.Send() を使用して 100,000 バイト/秒を送信しようとすると、すべてが到着するように見えますが (データグラムのドロップはありません)、最後のデータグラムが到着するまでに大きな遅延が発生します。TcpClient.Send() 関数は、バッファが送信できるようになるまでブロックしていると思います。これにより、現在のアルゴリズムが台無しになります。
誰でも次の方法についての情報源を教えてもらえますか?
UDP 経由で実際の帯域幅を検出します。
使用可能なパイプに合わせて帯域幅を動的に調整するためのより優れたアルゴリズム。
必要な帯域幅でスムーズにデータを送信します。
遅延を検出して最小限に抑える方法。
私は先週、車輪を回転させてきました.1つの問題を解決するたびに、別の問題が頭に浮かぶようです.
delphi - TUdpSocket の処理
Delphi で TUdpSocket を使用しようとしています。私がやりたいことは、UDP サーバーに接続し、データを送信して応答を待つことです。データは正しく送信されますが、コントロールは何も受信しません。どうしてか分かりません。私はこの問題に何時間も苦労してきましたが、あきらめるつもりです:-(。
TIdUDPClient を使ってみましたが、状況は同じです。データは正しく送信されますが、何も受信されません。
TIdUDPServer のみが、データの送受信の両方で多かれ少なかれ適切に機能します。残念ながら、データ受信は別のスレッド (ThreadedEvent プロパティに応じてメインまたはその他) によって処理されるため、同期を使用する必要があり、コード全体が複雑になります。自分のスレッドで UDP 接続を処理したいと思います。データを送信し、WaitForData() を呼び出して応答を待ってから、同じスレッドで処理します。
もし不可能なら、私はサードパーティのコントロールを使いたくありませんが、それが唯一の解決策であるなら、私はそれを受け入れます.
事前にご連絡いただき、誠にありがとうございました。
---- 例 ---
i) TUDPソケット:
ご覧のとおり、コントロールは送信したデータを受信する必要があります。Select() メソッドが呼び出された後に lR が true と評価されるため、明らかにそうです。ただし、ReceiveIn() は、ReceiveBuf() と同様に空の文字列を返します。UDP サーバーを起動してデータを送信すると、正しく受信されるので、データが実際に送信されていることは確かです。
c# - C# から DHCPINFORM メッセージ応答を取得する際の問題
DHCP サーバーを介して情報を取得するアプリケーションを開発しています。そのため、ポート 67 UDP ブロードキャストで DHCPINFORM パケットを送信しています。私が直面している問題は、応答が得られないことです。つまり、DHCP サーバーからの DHCPACK またはその他のメッセージが常に返されます。つまり、一度に DHCPACK パケットが返される場合とまったく返されない場合があります。この問題の原因は何ですか?
これが私のネットワーク構成です 私のIP:192.168.3.31 DHCPサーバーは:192.168.3.108です
私が使用しているC#コードは次のとおりです
私を助けてください?
c# - C# UdpClient サーバーとクライアントの問題
これは私のサーバーコードです
これは私のクライアントコードです
私のクライアントとサーバーによると、クライアントはサーバーにデータを送信するものです。
しかし、私の要件は逆です!私はそれを行うことができません..このコードをサーバーに追加しようとすると
次のように例外が発生しますThe operation is not allowed on non-connected sockets.
誰かが私を助けることができますか?
c# - c#UdpClientで使用されているポート番号を知る方法は?
私はcsharpを使用してクライアントサーバーアプリケーションを作成しています。サーバーは、固定ポート番号のtcplistenerを使用しています。クライアントはtcpclientを使用してサーバーに接続します。接続されると、クライアントとサーバーの両方がこの接続を使用して通信します。次に、アプリケーションはメッセージを送受信するための新しいudp接続を作成します。サーバーは単一のクライアントからの複数の接続を受け入れることを想定しているため、異なるポートで各接続を区別する必要があります。これを行うには、最初に1.サーバーでudpclientを作成する必要があります(サーバーで未使用のudpポートを自動的に使用します)。2.サーバーudpclientが使用するポート番号をクライアントに送信します。3.クライアントは、指定されたポート番号を使用してサーバーにデータを送信します。
問題は、使用されているポート番号を知ることができるudpclientを作成する方法です。
c# - UdpClient.BeginReceive をループで使用する方法
やりたい
しかし、 を使用する代わりに、 をUdpClient.Receive
使用する必要がありますUdpClient.BeginReceive
。問題は、どうすればいいですか?を使用したサンプルは多くなくBeginReceive
、MSDN の例はまったく役に立ちません。を使用する必要がBeginReceive
ありますか、それとも別のスレッドで作成する必要がありますか?
私は一貫してObjectDisposedException
例外を受け取ります。送信された最初のデータのみを取得します。次のデータは例外をスローします。
何を与える?
ちなみに、一般的な考え方は次のとおりです。
- tcpclient マネージャーを作成します。
- udpclient を使用してデータの送受信を開始します。
- すべてのデータが送信されると、tcpclient マネージャーは受信者にすべてのデータが送信されたことを通知し、udpclient 接続を閉じる必要があります。
c - UDP ソケットの送信者 IP/ポート
Cソケットで送信者IPと(動的に取得された)ポートを取得することは可能ですか? 私は次のものを持っています:
これはほとんどガイドから取られています (私はそれを理解していますか?)。しかし、クライアント データを見つけるためにどの情報を使用するかを特定するのに苦労しています。
どんな助けでも大歓迎です、ありがとう!
c# - C# UDP ソケット バインド例外
ワイヤレス メッシュ用のプログラムを作成しようとしています (名前以外はアドホックです)。ほとんどのネットワークは TCP メッセージングを処理しますが、すべての近隣 IP を特定するために (起動時に不明になるため)、最初の検出メッセージに UDP ブロードキャストを使用することにしました。そのコードは、ほとんどの場合、最初のテストが機能しているように見えたため、無関係であり、現在は呼び出していません。
以下は、ネイバーの IP を受信して登録するセクションです。
両方の IPEndPoints でテストしましたが、設定方法に関係なく、Bind は SocketException.ErrorCode 10022 Windows Socket Error Codesで失敗します。これは無効な引数ですが、必要な引数が EndPoint であるため、それが何を意味するのか混乱しています。
これは最初の実行で失敗するため、ポートを再バインドしようとしているわけではありません。
c# - Udpclient localendpoint、remoteendpoint。それはどういう意味ですか?
udpclientが受信する特定のipaddress:portを指定するにはどうすればよいですか?updclient.client.localendpointおよびudpclient.client.remoteendpointと混同されています。リモートエンドポイントかもしれないと思っていましたが、リモートエンドポイントの値を表示できません。さらに、ローカルエンドポイントのIPは0.0.0.0です。それはどういう意味ですか?
c# - C#で UdpClient ReceiveBufferSize プロパティを設定することは可能ですか?
udp パケットを受信する際のバッファ オーバーフローを防ぐために、udpclient receivebuffersize を変更したいと考えています。C#で変更することは可能ですか。実際のプロパティは UdpClient.Client.ReceiveBufferSize です。他の方法を使用する必要がありますか?
ありがとう。