package UDP_在线咨询;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
public class Talk_Send implements Runnable {
private DatagramSocket socket;
private String toIp;//ip
private int toPort;//端口
private BufferedReader read;
public Talk_Send(int port,String toIp,int toPort) {
try {
System.out.println("发送工作");
this.toIp =toIp;
this.toPort =toPort;
socket=new DatagramSocket(port);
read =new BufferedReader(new InputStreamReader(System.in));//system.in 不用while 但是可以不停输入,估计是全程可以输入
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true) {
String str=null ;
try {
str =read.readLine();
if(str.equals("bye")) {//判断是否结束
socket.close();
break;
}
byte [] buf =new byte[1024*60];
buf=str.getBytes();
DatagramPacket packet =new DatagramPacket(buf, buf.length,new InetSocketAddress(toIp, toPort));
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
接收类
package UDP_在线咨询;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Talk_Receive implements Runnable {
private DatagramSocket receive;
private byte [] buf;
private DatagramPacket pack;
private String from;
public Talk_Receive(int port,String from) {
try {
this.from =from;
receive =new DatagramSocket(port);
System.out.println("接收端工作");
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
while(true) {
try {
buf=new byte[1024*60];
pack = new DatagramPacket(buf, buf.length);
receive.receive(pack);
byte [] datas =pack.getData();
String news=new String(datas,0,datas.length);
if(news.equals("bye")) {
receive.close();
break;
}
System.out.println(from+":"+news);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端(学生)
package UDP_在线咨询;//待改进 接收端改为保护线程
public class Talk_student {
public static void main(String[] args) {
Thread receive= new Thread(new Talk_Receive(9999, "小美"));
receive.setDaemon(true);
receive.start();
new Thread(new Talk_Send(5555, "localhost", 6666)).start();
}
}
客户端(老师)
package UDP_在线咨询;//待改进 接收端改为保护线程
public class Talk_teacher {
public static void main(String[] args) {
new Thread(new Talk_Send(8888, "localhost", 9999)).start();
Thread receive =new Thread(new Talk_Receive(6666, "冯老师"));
receive.setDaemon(true);
receive.start();
}
}