UDP通信用到DatagramSocket和DatagramPacket两个类。
利用线程来实现UDP互相通信。源码如下:
server端:
import java.io.IOException; import java.net.*; import java.util.Scanner; public class udpServer { public static void main(String[] args) throws IOException { //收 new Thread(){ @Override public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(10000); } catch (SocketException e) { e.printStackTrace(); } while(true){ byte [] b = new byte[1024]; DatagramPacket dp= new DatagramPacket(b,b.length); try { ds.receive(dp); } catch (IOException e) { e.printStackTrace(); } String string = new String(b,0,dp.getLength()); System.out.println(string); } } }.start(); //发 new Thread(new Runnable(){ public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } while(true){ String msg=new Scanner(System.in).next(); byte[] b = msg.getBytes(); DatagramPacket dp = null; try { dp = new DatagramPacket(b,b.length, InetAddress.getLocalHost(),10001); } catch (UnknownHostException e) { e.printStackTrace(); } try { ds.send(dp); } catch (IOException e) { e.printStackTrace(); } } } }).start(); } }
client端:
import java.io.IOException; import java.net.*; import java.util.Scanner; public class UdpClient { public static void main(String[] args) throws Exception { //发 new Thread(){ @Override public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(10001); } catch (SocketException e) { e.printStackTrace(); } while(true){ byte [] b = new byte[1024]; DatagramPacket dp= new DatagramPacket(b,b.length); try { ds.receive(dp); } catch (IOException e) { e.printStackTrace(); } String string = new String(b,0,dp.getLength()); System.out.println(string); } } }.start(); //收 new Thread(new Runnable(){ public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } while(true){ String msg=new Scanner(System.in).next(); byte[] b = msg.getBytes(); DatagramPacket dp = null; try { dp = new DatagramPacket(b,b.length, InetAddress.getLocalHost(),10000); } catch (UnknownHostException e) { e.printStackTrace(); } try { ds.send(dp); } catch (IOException e) { e.printStackTrace(); } } } }).start(); } }