如果是单线程,聊天的发送和接收必须有顺序,为了更符合常规,采用多线程实现发送和接收数据,这样就可以了
//接收线程 package com.dream.udp02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ReceiveThread extends Thread{ DatagramSocket socket; public ReceiveThread(DatagramSocket socket) { super(); this.socket = socket; } @Override public void run() { while(true){ byte[] receiveBt=new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveBt, receiveBt.length); try { socket.receive(receivePacket); System.out.println(new String(receiveBt).trim()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //发送线程 package com.dream.udp02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Scanner; public class SendThread extends Thread{ private String ip; private int port; private DatagramSocket socket; private String name; public SendThread(String ip, int port, DatagramSocket socket, String name) { super(); this.ip = ip; this.port = port; this.socket = socket; this.name = name; } @Override public void run() { Scanner scan = new Scanner(System.in); while(true){ byte[] sendBt=(name+":"+scan.next()).getBytes(); DatagramPacket sendPacket; try { sendPacket=new DatagramPacket(sendBt, 0, sendBt.length,InetAddress.getByName(ip),port); socket.send(sendPacket); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //客户端1 package com.dream.udp02; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Client1 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8080); new ReceiveThread(socket).start(); new SendThread("127.0.0.1", 7070, socket, "客户端1").start(); } } //客户端2 package com.dream.udp02; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Client2 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(7070); new ReceiveThread(socket).start(); new SendThread("127.0.0.1",8080, socket, "客户端2").start(); } }