UDP Programming Example
Server side:
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中获取的数据的长度 } } }
Client side:
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(); } }
Note:
1. Strictly speaking, UDP does not have a server or a client. Unlike TCP, which has ServerSocket and Socket, UDP only has DatagramSocket.
2. The ports of UDP and TCP are separate. For example, UDP has a port number of 5678, and TCP also has a port number of 5678.
3. UDP is connectionless, so the ip:port to be sent must be specified in the data package sent.
4. If you want to send long, int and other types of data, you need to use ByteArrayOutputStream, DataOutputStream, ByteArrayInputStream, ByteArrayInputStream stream types, as follows:
Server side:
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()); } } }
Client:
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(); } }
Thank you for reading, I hope it can help everyone, thank you for your support of this site support!
For more detailed java Socket UDP examples and related articles, please pay attention to the PHP Chinese website!