发送方代码
package chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class TalkSend implements Runnable{
private DatagramSocket socket;
private BufferedReader reader;
private int fromProd;
private String toId;
private int toProt;
public TalkSend(int fromProd,String toId,int toProt) {
this.fromProd = fromProd;
this.toId = toId;
this.toProt = toProt;
try{
socket = new DatagramSocket(fromProd);
reader = new BufferedReader(new InputStreamReader(System.in));
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
try{
String data = reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet =
new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(toId, toProt));
socket.send(packet);
if("bye".equals(data)){
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
接收方代码
package chat;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class TalkReceive implements Runnable{
private DatagramSocket socket;
private int port;
private String msgFrom;
public TalkReceive(int port,String msgFrom) {
this.port = port;
this.msgFrom = msgFrom;
try {
socket = new DatagramSocket(port);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
try {
byte[] bytes = new byte[1024];
DatagramPacket packet =
new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);
byte[] data = packet.getData();
String receiveData = new String(data, 0, data.length);
System.out.println(msgFrom+":"+receiveData);
if("bye".equals(receiveData)){
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
模拟学生端
package chat;
public class TalkStudent {
public static void main(String[] args) {
new Thread(new TalkSend(6666,"localhost",8888)).start();
new Thread(new TalkReceive(7777,"老师")).start();
}
}
模拟教师端
package chat;
public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkSend(5555,"localhost",7777)).start();
new Thread(new TalkReceive(8888,"学生")).start();
}
}