UDP编程


发送端:

1、创建DatagramSocket对象socket。

2、创建数据报包DatagramPacket对象packet。(指定发送的数据内容,目标地址和端口)

3、发送数据。(socket.send(packet))

4、释放资源。(socket.close())

接收端:

1、创建DatagramSocket对象socket。(指定接收端口)

2、创建数据报包DatagramPacket对象packet,传入接收数据的数组。

3、接收数据。(socket.receive(packet))

4、释放资源。(socket.close())

实例一:语法示例


发送端:

//创建Socket对象

                     DatagramSocket ds = new DatagramSocket();

                     

                     //创建数据报包

                     byte[] buf = "Hello World".getBytes();

                     int length = buf.length;

                     InetAddress address = InetAddress.getByName("Arica");

                     int port = 2223;

                     DatagramPacket dp = new DatagramPacket(buf, length, address, port);

                     

                     //发送数据

                     ds.send(dp);

                     

                     //释放资源

                     ds.close();

接收端:

/创建Socket对象,指定接收端口

                     DatagramSocket ds = new DatagramSocket(2223);

                     

                     //创建数据报包

                     byte[] buf = new byte[1024 * 64];

                     DatagramPacket dp = new DatagramPacket(buf, buf.length);

                     

                     //接收数据

                     ds.receive(dp);

                     

                     //释放资源

                     ds.close();

                     

                     //接收数据

                     InetAddress address = dp.getAddress();

                     byte[] data = dp.getData();

                     int length = dp.getLength();

                     int port = dp.getPort();

                     

                     //打印到控制台

                     System.out.println("form : " + address + ":" + port + ": data : " + new String(data,0,length));

实例二:键盘输入


发送端:

// 创建Socket对象

                     DatagramSocket ds = new DatagramSocket();

                     // 创建扫描器对象

                     Scanner scan = new Scanner(System.in);

                     while (true) {

                               String data = scan.nextLine();

                               if ("886".equals(data)) {

                                         break;

                               } else {

                                         // 创建数据报包

                                         byte[] buf = data.getBytes();

                                         DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("Arica"), 2224);

                                         // 发送数据

                                         ds.send(dp);

                               }

                     }

                     // 释放资源

                     ds.close();

接收端:

// 创建Socket对象,指定接收端口

                     DatagramSocket ds = new DatagramSocket(2224);

                     // 创建数据报包

                     byte[] buf = new byte[1024 * 64];

                     DatagramPacket dp = new DatagramPacket(buf, buf.length);

                     while (true) {

                               ds.receive(dp);

                               byte[] data = dp.getData();

                               System.out.println("form : " + dp.getAddress().getHostName() + ": 2224 " + ": data : "

                                                   + new String(data, 0, data.length));

                     }

实例三:聊天模拟


chat端:

importjava.net.DatagramSocket;

public class Chat {

          public static void main(String[] args) throws Exception {

                     Receive r = new Receive(new DatagramSocket(2225));

                     Send s = new Send(new DatagramSocket());

                     new Thread(r).start();

                     new Thread(s).start();

          }

}

发送端:

import java.io.IOException;

importjava.net.DatagramPacket;

importjava.net.DatagramSocket;

importjava.net.InetAddress;

importjava.net.UnknownHostException;

import java.util.Scanner;

public class Send implements Runnable {

          DatagramSocket ds ;

          

          public Send(DatagramSocket ds) {

                     super();

                     this.ds = ds;

          }

          @Override

          public void run() {

                     // 创建扫描器对象

                     Scanner scan = new Scanner(System.in);

                     while (true) {

                               String data = scan.next();

                               if ("886".equals(data)) {

                                         break;

                               } else {

                                         // 创建数据报包

                                         byte[] buf = data.getBytes();

                                         DatagramPacket dp;

                                         try {

                                                   dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 2225);

                                                   ds.send(dp);

                                         } catch (UnknownHostException e1) {

                                                   e1.printStackTrace();

                                         } catch (IOException e) {

                                                   e.printStackTrace();

                                         }

                               }

                     }

                     // 释放资源

                     ds.close();

          }

}

接收端:

import java.io.IOException;

importjava.net.DatagramPacket;

importjava.net.DatagramSocket;

public class Receive implements Runnable {

          DatagramSocket ds;

          public Receive(DatagramSocket ds) {

                     this.ds = ds;

          }

          @Override

          public void run() {

                     // 创建数据报包

                     while (true) {

                               byte[] buf = new byte[1024 * 64];

                               DatagramPacket dp = new DatagramPacket(buf, buf.length);

                               try {

                                         this.ds.receive(dp);

                               } catch (IOException e) {

                                         e.printStackTrace();

                               }

                               byte[] data = dp.getData();

                               System.out.println("form : " + dp.getAddress().getHostName() + ": 2225 " + ": data : "

                                                   + new String(data, 0, data.length));

                     }

          }

}