如果是单线程,聊天的发送和接收必须有顺序,为了更符合常规,采用多线程实现发送和接收数据,这样就可以了
//接收线程
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();
}
}