問題タブ [datagram]

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

java - Java ソケットで到達不能な UDP ポートを処理する

Java DatagramSocket を使用して、データを複数の異なるクライアントにストリーミングしています。現在登録されているクライアントのリストを自分で処理するので、ソケットをサーバー ポートにバインドするだけで、特定のクライアントには接続しません。

ただし、connect() を使用しないと、DatagramSocket が到達不能ポートの ICMP 通知に反応できなくなります。ICMP 通知は、クライアントの 1 つが停止し、サーバーから適切に登録解除する機会が得られない場合に送信されます。

その動作を元に戻す方法はありますか? クライアントごとに 1 つの DatagramSocket を使用することを考えましたが、サーバー上の同じポートにすべてバインドする必要があるため、実現可能ではないようです (私の知る限り、UDP では不可能です)。

私のサーバーが ICMP メッセージを見る保証がないことは承知しており、それを処理するためにある種のタイムアウト メカニズムを実装します。これは、ストリーミング クライアント ユーザーにとって良いことのように思えます。

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

java-me - DatagramConnectionを使用してケーブルを介してJ2MEでデータを送信するのは正しいですか?

携帯電話とパソコンの間でJ2MEを使ってデータを送りたい。2台のマシンは電話のケーブルで接続されています。Wi-Fi、http接続、インターネットはありません。DatagramConnectionそれでは、モバイルのケーブルがコンピューターのUSBポートに挿入されているときに、J2MEを使用してコンピューターにデータを送信するのは間違っているか正しいですか?

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

java - 残りの空のバッファを取り除く方法は?

データグラム ソケットを使用してメッセージを交換するサーバー/クライアント アプリケーションがあります。メッセージの長さが分からないため、最初はバッファ サイズを 1024 バイトに設定しました。1024 バイトより短いものを送信すると、残りの文字列が奇妙な文字 (null 文字またはどのように呼び出されるかわかりません) として表示されます。ここに画面があります: 文字列バッファのヌル文字

クライアントコード: byte[] buf = ("This is another packet.\n").getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, inetAddress, serverport); socket.send(packet)

サーバーコード: byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet);

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

java - DatagramSocket が一時的にパケットの受信を停止する (Java)

UDP パケット (512 バイト) を介してプレイヤー情報をリモート サーバーに送信するゲーム用のプラグインを Lua でプログラムしました。リモート サーバーは、パケットからデータを読み取り、すべてのプレイヤー情報を xml ファイルに集約します (このファイルは、お互いの現在の状態を確認できるように、すべてのプレイヤーが Web を使用します)。

着信パケットを処理するために DatagramSocket を使用して Java でサーバーをプログラミングしましたが、奇妙な動作に気付きました。一定の時間が経過すると、DatagramSocket は約 10 ~ 12 秒間、一時的に接続の受け入れを停止したように見えますが、その後、通常の動作を再開します (私が見ることができる例外はスローされません)。クライアントがパケットを送信する頻度と、この動作が発生する速度との間には、確実に関係があります。クライアントの更新頻度を上げると、DatagramSocket はより早く「失敗」します。

言及する価値があるかもしれませんが、受信した各パケットは、パケット内のデータを処理するスレッドを生成します。違いがあれば、Linuxでサーバーを実行しています!

この種の動作が発生する原因を知っている人はいますか?

アンドリュー

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

java - データグラム ソケット経由のネットワーク検出: マルチキャスト

サーバーがネットワーク内のアクティブなクライアントをリッスンする例を実装しています。

サーバーがマルチキャストを実行し、クライアントがサーバーに応答するためにデータグラムソケットを使用しています。

}

そしてクライアント側で:

}

上記の例では、クライアントはサーバーの IP アプリオリ (ハードコード) を知っている必要があります。サーバーがそのIPをクライアントに送信し、クライアントがそれに応答するように、サーバー側のコードを変更するにはどうすればよいですか?

ソケットを使用してこれを行うことができましたが、データグラム ソケットを使用することは可能ですか?

ありがとう!

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

c# - 次のキューに入れられたデータグラムのサイズ-UDP

クラスを使用しSystem.Net.Sockets SocketてUDPデータグラムを受信して​​います。データグラムの有効性を確認するために、受信したデータグラムの正確な長さを知りたいと思いました。

Socket.Receive(Byte())メソッドのドキュメントによると:

コネクションレス型ソケットを使用している場合、Receiveは、Connectメソッドで指定した宛先アドレスから最初にキューに入れられたデータグラムを読み取ります。受信したデータグラムがバッファパラメータのサイズよりも大きい場合、バッファはメッセージの最初の部分でいっぱいになり、余分なデータは失われ、SocketExceptionがスローされます。

Socket.Availableプロパティは、読み取ることができるバイトの合計を示します。これは、キューに入れられたすべてのデータグラムのサイズの合計です。

次のデータグラムのサイズを確認する方法はありますか?

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

java - DatagramSocket: ファイル送信、クライアントが画像ファイルを受信しない

DatagramSocket を使用して一連のファイルを送信しようとしています。しかし、私が理解できない問題があります。画像ファイル以外のファイルの転送はうまくいきますが、画像ファイルの送信中、サーバーはファイルを送信しますが、クライアントは受信でスタックします。クライアント側とサーバー側のコード ブロックは次のとおりです。

サーバ:

クライアント:

また、私のコード、パフォーマンス、または間違った使用のヒントについてヒントを与えることができれば感謝しています。
前もって感謝します。

アップデート:

ファイル自体を送信する for ループに少しスリープ時間を追加した後、ファイルの送信を完了できるようになりましたが、取得したすべての画像ファイルが破損しています。

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

sockets - UDP ソケットの読み取り: レコードまたはストリーム

UDP 送信者が sendto を数回実行するとします。

受信者は、データが利用可能になると次のコードを実行します。

recvfrom が呼び出されたときにすべてのデータ (100+200+300) が利用可能である場合、1 回の recvfrom 呼び出しまたは予測できないサイズの複数回の recvfrom 呼び出しで読み取られる可能性はありますか? それとも、送信されたのと同じ部分で常に受信されます: 100、200、300?

100% 正しいレシーバー コードを作成するには、ストリーム解析ロジックやデータ レコード読み取りロジックを実装する必要がありますか?

この質問では、データが失われておらず、パケットの順序が変更されていないと仮定していますが、一般的に、これは UDP ソケットでは正しくありません。

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

java - UDP パケットを送信し、Java で応答を受信する必要がある

UDP パケットを送信し、UDP サーバーから応答を返す必要があります。UDP は Java の java.net.DatagramPacket に似ていると思いましたが、DatagramPacket のドキュメントでは、パケットを送信しても何も返されないようです。 net.ソケット