UDP-Programmierbeispiel
Server:
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:
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(); } }
Erklärung:
1. Streng genommen unterscheidet UDP nicht zwischen Server und Client. Im Gegensatz zu TCP, das über ServerSocket und Socket verfügt, verfügt UDP nur über DatagramSocket.
2. Die Ports von UDP und TCP sind getrennt. Beispielsweise hat UDP die Portnummer 5678 und TCP hat auch die Portnummer 5678.
3. UDP ist verbindungslos, daher muss der zu sendende IP:Port im gesendeten Datenpaket angegeben werden.
4. Wenn Sie Long-, Int- und andere Datentypen senden möchten, müssen Sie die Stream-Typen ByteArrayOutputStream, DataOutputStream, ByteArrayInputStream und ByteArrayInputStream wie folgt verwenden:
Serverseite:
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(); } }
Vielen Dank fürs Lesen, ich hoffe es Kann jedem helfen, vielen Dank an alle. Unterstützen Sie diese Seite!
Ausführlichere Java-Socket-UDP-Beispiele und verwandte Artikel finden Sie auf der chinesischen PHP-Website!