UDPパケットを送信して、UDPサーバから応答を返さなければなりません。私はUDPはJavaのjava.net.DatagramPacketと似ていましたが、DatagramPacketのドキュメントは、パケットを送信したものの、何も戻ってこないと思われます。これは正しいことですか、私はJavaを使うべきですか? net.SocketUDPパケットを送信してJavaで応答を受信する必要があります
答えて
UDPデータグラムの例送信と受信(source):
import java.io.*;
import java.net.*;
class UDPClient
{
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
これはうまく見えますが、サーバーに定義されたパケット長ではないようです。すなわち、サーバーから返されたパケットのパケット長が常に同じではないと思います。つまり、receiveDataバッファーは最大の可能なパケットサイズを処理するのに十分な大きさです。 –
はい。 UDPは信頼性の低いプロトコルであり、大量のデータをその上に送信することはめったにありません。しかし、パケットが受信された後、 'DatagramPacket.getLength()'から実際に含まれているバイト数を読み取ることができます。 – bezmax
'receivePacket.getData()'には、受信したデータだけでなく、これには、バッファの未使用部分も含まれています。受信したデータでStringを取得するには、 'new String(receivePacket.getData()、0、receivePacket.getLength()、StandardCharsets.UTF_8)'を使用し、文字セットを期待どおりに調整します。 –
DatagramPacketとDatagramSocketを使用する必要があります。パケットを送信すると、パケットが送信されます。あなたがパケットを受信したときしかし、あなたは
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
ソケットは、TCP接続のためだけである(例えば、サーバが応答する)別のプログラムから送信されたパケットを取得することができます。
Javaドキュメントは、クライアントとサーバーを作成する方法をカバーし。
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
あなたは正確にUDPとTCPソケットの区別だDatagramSocket#receive
を見てみたいです。
UDPはブロードキャストされますが、java.net.SocketのTCPはポイントツーポイントです。 UDPは火災と忘れがあり、JMSトピックにメッセージを公開するのと同じです。
参照:http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html
UDPはブロードキャストされていません。ブロードキャストはIPレベルのものです。 – OrangeDog
- 1. UDPパケットを送信し、CのルータからICMP応答を受信
- 2. Javaを使用してUDPパケットを送受信しますか?
- 3. .NETでUDPパケットを送受信する
- 4. アンドロイドでUDPパケットを受信
- 5. pythonでhttpリクエストを送信して受信し、セッションクッキーを送信する必要があります。
- 6. UDP要求を255.255.255.255に送信し、iOSで応答を待っています
- 7. 要求を送信して応答を受け取るツール
- 8. Java Mailを使用してiCalミーティング要求を送信し、応答を受信する方法
- 9. リモートUDPを送受信します。
- 10. UDPの送信/受信
- 11. メッセージを送信して同じソケットで応答を受信する方法
- 12. UDPパケットの送受信に関するヘルプ - Cソケット
- 13. VSTでUDPを送受信する
- 14. UDPブロードキャストをPHPから送信し、C#で受信する
- 15. 連続してudpパケットを送信する方法GCDAsyncUdpSocket
- 16. 異なるUDPポートを持つネットワークコンピュータ上でパケットを送受信する場合
- 17. URLでJSONデータを送信し、iPadで応答を受け取ります
- 18. UDPクライアントがデータをサーバーに送信しましたが、応答がありません
- 19. Pythonで間違ったチェックサムでUDPパケットを受信する
- 20. Java/Android:到着時にパケットを受信している間にパケットを送信する方法
- 21. AndroidはWi-Fi経由でJavaクライアントにUDPパケットを送信します
- 22. フォームの送信応答を送信
- 23. Pythonで受信UDPパケットのTTLを取得する
- 24. パケット送信/受信の処理方法
- 25. Udpソケット安定送信、バースト受信
- 26. スレッド(受信者)は要求を送信するだけで、スレッド(受信者)はファイルに要求と応答を書き込むことができますか?
- 27. セカンダリインターフェイスでUDP/IPv6パケットを受信できません
- 28. SCEPペイロードの後にどのような応答をデバイスに送信する必要がありますか?
- 29. UDPを使ったブロードキャストは、繰り返しパケットを送信しますか?
- 30. マルチホームマシン上でJavaでUDPパケットを送受信するにはどうすればよいですか?
UDPはデータグラムです。受信者が何かを返送しない限り、あなたは何も返さない。これはtcpソケットと同じです。あなたがしたいことを教えてくれたら、多分? – Erik
OKサーバーは既に存在しています(自分で書かれていない)パケットを送信するときに何かを送り返すべきですが、送り返したパケットはどのように取得しますか? –
最初の質問は:サーバーはudpを返信しますか?その場合は、Datagram.receive()メソッドを使用して独自のUDPソケットを読み込む必要があります。 – Erik