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. 엄밀히 말하면 UDP에는 ServerSocket과 Socket이 있는 TCP와 달리 DatagramSocket만 있습니다.
2. UDP와 TCP의 포트는 별개입니다. 예를 들어 UDP의 포트 번호는 5678이고, TCP의 포트 번호도 5678입니다.
3. UDP는 Connectionless이므로 전송되는 데이터 패키지에 전송할 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 소켓 UDP 예제 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!