模拟发送端:
package cn.xqh.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class SendThread implements Runnable {
private String receivename;
private int sendport;
private int receiveport;
private DatagramSocket send;
private String s;
BufferedReader br ;
private boolean flag =true;
public SendThread(int sendport,String receivename,int receiveport) {
this.sendport = sendport;
this.receivename = receivename;
this.receiveport = receiveport;
try {
send = new DatagramSocket(sendport);
br = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(flag) {
try {
s =br.readLine();
byte[] b = s.getBytes();
DatagramPacket dp = new DatagramPacket(b,0,b.length,new InetSocketAddress(receivename,receiveport));
send.send(dp);
if(s.equals("bye")) {
System.out.println("准备退出聊天...");
flag = false;
}
} catch (IOException e) {
e.printStackTrace();
}
}
send.close();
}
}
模拟接收端:
package cn.xqh.net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReceiveThread implements Runnable {
private int fromport;
private String name;
private DatagramSocket receive;
private boolean flag =true;
public ReceiveThread(int fromport, String name) {
this.fromport = fromport;
this.name = name;
try {
receive = new DatagramSocket(fromport);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(flag) {
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b,0,b.length);
try {
receive.receive(dp);
byte[] b2 = dp.getData();
String s =new String(b2,0,dp.getLength());
System.out.println(name+"说:"+s);
System.out.println(dp.getLength());
if(s.equals("bye")) {
System.out.println("准备退出聊天...");
flag=false;
}
} catch (IOException e) {
e.printStackTrace();
}
}
receive.close();
}
}
另写两个类模拟老师和学生:
package cn.xqh.net;
public class Teacher {
public static void main(String[] args) {
new Thread(new SendThread(8888,"localhost",8989)).start();
new Thread(new ReceiveThread(6666,"学生")).start();
}
}
package cn.xqh.net;
public class Student {
public static void main(String[] args) {
new Thread(new ReceiveThread(8989,"老师")).start();
new Thread(new SendThread(7777,"localhost",6666)).start();
}
}