udp模拟在线交流咨询(加入多线程)
发送方
package cn.com.inet;
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 TalkSend implements Runnable {
// private DatagramSocket client;
// private BufferedReader reader;
// private String toIP;
// private int toPort;
// private int port;
// public TalkSend(int port,String toIP,int toPort) {
// this.toIP = toIP;
// this.toPort = toPort;
// this.port = port;
// try {
// this.client = new DatagramSocket(port);
//
// } catch (SocketException e) {
// e.printStackTrace();
// }
// }
//
// @Override
// public void run() {
// reader = new BufferedReader(new InputStreamReader(System.in));
// while(true) {
// String data;
// try {
// data = reader.readLine();
// byte[] datas = data.getBytes();
// DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
// client.send(packet);
// if (data.equals("exit"))
// break;
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// client.close();
// }
private DatagramSocket client;
private BufferedReader reader;
private String toIP;
private int toPort;
public TalkSend(int port,String toIP,int toPort) {
this.toIP = toIP;
this.toPort= toPort;
try {
this.client = new DatagramSocket(port);
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true) {
String data = null;
try {
data = reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(toIP,toPort));
client.send(packet);
if (data.equals("exit")) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
client.close();
}
}
接收方
package cn.com.inet;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TalkReceive implements Runnable {
// private DatagramSocket server;
// private String from;
// public TalkReceive(int port,String from) {
// this.from = from;
// try {
// this.server = new DatagramSocket(port);
// } catch (SocketException e) {
// e.printStackTrace();
// }
// }
//
// @Override
// public void run() {
// while(true) {
// byte[] container = new byte[1024*60];
// DatagramPacket packet = new DatagramPacket(container,0,container.length);
// try {
// server.receive(packet);
// byte[] data = packet.getData();
// int len = packet.getLength();
// String datas = new String(data,0,len);
// System.out.println(from+":"+datas);
// if (datas.equals("exit")) {
// break;
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// server.close();
// }
private DatagramSocket server;
private String from;
public TalkReceive(int port,String from) {
this.from = from;
try {
this.server = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true) {
byte[] container = new byte[1024*60];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
try {
server.receive(packet);
byte[] data = packet.getData();
int len = packet.getLength();
String str = new String(data,0,len);
System.out.println(from+":"+str);
if (str.equals("exit")) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
server.close();
}
}
模拟老师,学生交互
package cn.com.inet;
public class TalkTeacher {
public static void main(String[] args) {
// new Thread(new TalkReceive(6666,"学生")).start();
// new Thread(new TalkSend(7777,"localhost",5555)).start();
new Thread(new TalkReceive(6666,"学生")).start();
new Thread(new TalkSend(7777,"localhost",5555)).start();
}
}
package cn.com.inet;
public class TalkStudents {
public static void main(String[] args) {
// new Thread(new TalkSend(8888,"localhost",6666)).start();
// new Thread(new TalkReceive(5555,"老师")).start();
new Thread(new TalkSend(8888,"localhost",6666)).start();
new Thread(new TalkReceive(5555,"老师")).start();
}
}