image.png

客户端

  1. import java.io.*;
  2. import java.net.*;
  3. public class UDPClientTest {
  4. public static void main(String args[]) {
  5. DatagramSocket sendSocket = null;
  6. try {
  7. sendSocket = new DatagramSocket(3456);
  8. String string = "0000009390832";
  9. byte[] databyte = new byte[100];
  10. databyte = string.getBytes();
  11. DatagramPacket sendPacket = new DatagramPacket(databyte, string.length(),
  12. InetAddress.getLocalHost(), 10000);
  13. sendSocket.send(sendPacket);
  14. System.out.println("客户端开始传送数据!");
  15. } catch (SocketException e) {
  16. System.out.println("不能打开数据报Socket,或数据报Socket无法与指定端口连接!");
  17. } catch (IOException ioe) {
  18. System.out.println(ioe.toString());
  19. } finally {
  20. sendSocket.close();
  21. }
  22. }
  23. }

服务器(receive会阻塞,采用线程)

  1. import java.io.*;
  2. import java.net.*;
  3. public class UDPServerTest {
  4. static public void main(String args[]) {
  5. try {
  6. DatagramSocket receiveSocket = new DatagramSocket(10000);
  7. byte buf[] = new byte[1000];
  8. DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
  9. System.out.println("开始接受数据:");
  10. //启动接收端线程
  11. new Thread(new recthread(receiveSocket,receivePacket)).start();
  12. }
  13. catch (SocketException e) {
  14. e.printStackTrace();
  15. System.exit(1);
  16. }
  17. }
  18. }
  19. //因为要一直接收数据,所以接收receive会阻塞,所以创建一个线程,防止阻塞
  20. class recthread extends Thread{
  21. DatagramSocket ds=null;
  22. DatagramPacket dp;
  23. public recthread(DatagramSocket ds,DatagramPacket dp){
  24. this.ds=ds;
  25. this.dp=dp;
  26. }
  27. public void run( ){
  28. while (true) {
  29. try {
  30. ds.receive(dp);
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. String name = dp.getAddress().toString();
  35. System.out.println("\n来自主机:" + name + "\n端口:" + dp.getPort());
  36. String s = new String(dp.getData(), 0, dp.getLength());
  37. System.out.println("接受到的数据是: " + s);
  38. }
  39. }
  40. }