UDP プログラミングの例
サーバー側:
package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length);//声明一个用来接收数据的“包裹” DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口 while(true){ ds.receive(dp); //阻塞式的 System.out.println(new String(buf,0,dp.getLength()));//dp中获取的数据的长度 } } }
クライアント:
package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) throws IOException { byte[] buf = new String("Hello").getBytes(); //UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); DatagramSocket ds = new DatagramSocket(9999); //指明发送端的端口号 ds.send(dp); ds.close(); } }
説明:
1. TCP とは異なり、UDP にはサーバーとクライアントの区別がありません。などと Socket の場合、UDP には DatagramSocket しかありません。
2. UDP と TCP のポートは別です。たとえば、UDP のポート番号は 5678 であり、TCP のポート番号も 5678 です。
3. UDP はコネクションレスであるため、送信されるデータ パッケージで送信される ip:port を指定する必要があります。
4.long、int、その他のタイプのデータを送信したい場合は、次のように ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream ストリーム タイプを使用する必要があります:
サーバー側:
package socket; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); DatagramSocket ds = new DatagramSocket(5678); ByteArrayInputStream bais = null; DataInputStream dos = null; while(true){ ds.receive(dp); bais = new ByteArrayInputStream(buf); dos = new DataInputStream(bais); System.out.println(dos.readLong()); } } }
クライアントサイド:
package socket; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) throws IOException { byte[] buf = null; long l = 100000L; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeLong(l); buf = baos.toByteArray(); DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); DatagramSocket ds = new DatagramSocket(9999); ds.send(dp); ds.close(); dos.close(); } }
読んでいただきありがとうございます、お役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Java Socket UDP の例と関連記事の詳細な説明については、PHP 中国語 Web サイトに注目してください。